1虚函数是推迟绑定的,基类中有一个虚函数,儿子和孙子都实现了这个虚函数,那么儿子和孙子的对象调用这个实现的虚函数,都是调用本身的函数,
2如果基类中有虚函数(不是纯虚函数)对象还是可以进行实例化的,他也可以调用自身定义的虚函数,实际执行的还是本身的函数。如:
class A
{
int data;
public :
virtual void ff() ;//虚函数,他有定义。
void xx();
A(int );
};
A::A(int a)
{
data = a;
}
void A::ff()
{
cout<<"这是基类ff()"<<endl;
}
void A::xx()
{
cout<<"这是A的xx()"<<endl;
}
如果是纯虚函数的话,不能实例化,如:
class A
{
int data;
public :
virtual void ff() = 0;//纯虚函数:没有定义
void xx();
A(int );
};
A::A(int a)
{
data = a;
}
void A::xx()
{
cout<<"这是A的xx()"<<endl;
}
3在使用基类的指针指向派生类时(或引用时),一定要是public继承才行;
如:
class A
{
。。。。
};
class B:A ///会报错的;
{
。。。。
};
A* aa = new C(1, 7, 9);
正确的写法:
class A
{
。。。。
};
class B: public A
{
。。。。
};
A* aa = new C(1, 7, 9);
(以下没有特别说明的虚函数都是只虚函数(非纯虚函数));
4有一个基类有一个虚函数,儿子和孙子都实现了这个虚函数,当基类的指针指向儿子和孙子时,当基类调用这个虚函数时,实际指向的是儿子,则调用儿子的函数,实际指向的是孙子,则调用孙子的函数。
5