为什么称它为动态绑定?

Suv*_*yil 2 c++ virtual inheritance dynamic language-lawyer

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

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; }
};
Run Code Online (Sandbox Code Playgroud)

假设,someFunction(A& aref).它可以采用类型BC或的对象A

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

我的意思是路径被定义(它可以是A或B或C).它并不完全run time dependent[就像要求用户输入年龄而用户输入一些单词或其他数据类型].

为什么这被称为run time binding?如果要分配的对象是兼容的还是没有,编译器会事先进行检查.

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

Yoc*_*mer 5

虚方法在对象中创建一个虚拟表,用于调用方法.

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

最明显的情况是,如果你有一个基类列表,它包含不同类型的对象:

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();
}
Run Code Online (Sandbox Code Playgroud)

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