我们使用virtual在 Cpp 中实现动态绑定(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)
。它可以采用B
或C
或A
类型的对象注意:假定已设置数据成员的值
我的意思是定义了路径(可以是A或B或C)。它不完全是
run time dependent
(例如,要求用户输入年龄,然后用户输入一些单词或其他数据类型)。但是为什么将其称为称为?
编译器会事先检查要分配的对象是否兼容
或者没有。
是用于表示引用变量与特定类型的对象之间没有严格关联的术语,并且在运行时确定该术语。
还有更多呢?
最佳答案
虚方法在用于调用方法的对象中创建 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 的变量,调用 show()),但仍然调用了正确的方法。