- 虚函数只需要在声明处加vitrual关键字,注意是声明处
- 为了方便,可以只将基类中的函数声明为虚函数,这样所有派生类中具有遮蔽关系的同名函数都将自动成为虚函数,多继承的时候需要小心。
- 当在基类中定义了虚函数时,如果派生类没有定义新的函数来遮蔽此函数,那么将使用基类的虚函数。
- 只有派生类的虚函数覆盖基类的虚函数(函数原型相同)才能构成多态(通过基类指针访问派生类函数)
- 构造函数不能是虚函数
- 析构函数可以声明为虚函数,而且**有时候必须要声明为虚函数 **
- 基类虚函数重载,子类必须遮蔽时(即将父类的重载函数遮蔽)才会调用子类函数
class Base{
public:
virtual void func();
virtual void func(int);
};
void Base::func(){
cout<<"void Base::func()"<<endl;
}
void Base::func(int n){
cout<<"void Base::func(int)"<<endl;
}
class Derived: public Base{
public:
void func();
void func(char *);
};
void Derived::func(){
cout<<"void Derived::func()"<<endl;
}
void Derived::func(char *str){
cout<<"void Derived::func(char *)"<<endl;
}
int main(){
Base *p = new Derived();
p -> func();
p -> func(10);
p -> func("http://c.biancheng.net");
return 0;
}