gpt4 book ai didi

c++ - 为什么叫动态绑定(bind)呢?

转载 作者:太空狗 更新时间:2023-10-29 23:36:23 24 4
gpt4 key购买 nike

我们在 Cpp 中使用 virtual 来实现动态绑定(bind),即在运行时根据创建的实际对象而不是引用或指针来决定必须调用哪个函数变量。

class A
{
int a;
public:
virtual void show();
};

void A::show() { cout<<a<<endl; }

class B:public A
{
int b;
public:
void show() { cout<<b<<endl; }
};

class C:public A
{
int c;
public:
void show() { cout<<c<<endl; }
};

假设,someFunction(A& aref)。它可以接受 BCA

类型的对象

注意:假设数据成员的值已设置

我的意思是路径已定义(可以是 A 或 B 或 C)。它并不完全依赖于运行时间 [比如要求用户输入年龄,然后用户输入一些单词或其他一些数据类型]。

但是为什么这叫做运行时绑定(bind)?编译器会事先检查要分配的对象是否兼容或没有。

是用来表示引用变量与特定类型的对象之间没有严格关联的术语,它是在运行时决定的。还有更多吗?

最佳答案

虚方法创建一个 virtual table 在用于调用方法的对象中。

在运行时查找正确的方法。

最明显的情况是,如果您有一个基类列表,其中包含不同种类的对象:

std::list<A*> myList = new std::list<A*>();
myList.push_back(new A());
myList.push_back(new B());
myList.push_back(new C());

for (A* a : myList)
{
a->show();
}

在这个小例子中,所有对象都是不同类型的,编译器将它们都视为A对象(有一个类型为A的变量调用show( )),但仍然调用了正确的方法。

关于c++ - 为什么叫动态绑定(bind)呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16443961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com