动态绑定:实际就是多态,多态是指不同的对象,对同一消息的不同响应,通过父类的指针或者引用,调用虚函数时,才会发生动态绑定。
举例如下:
#include<iostream>
using namespace std;
class A
{
public:
int i;
A():i(10){
}
virtual void f()
{
cout<< "A::f()" << i << endl;
}
};
class B:public A
{
public:
int j;
B():j(20){
}
void f()
{
cout << "B::f()"<< j <<endl;
}
};
int main()
{
B b;
A a;
A c = b;
A *p = &b;
p->f();
A &a1=b;
a1.f();
c.f();
return 0;
}
运行结果如下所示:
显然指针与引用是可以的,为什么单纯赋值无法实现呢?
解释如下:
子类对象赋值给父类,只是实现了公共部分的复制,从而发生数据损失,子类没有复制过去,仍是父类。