虚函数注意事项和多态构成条件

  • 虚函数只需要在声明处加vitrual关键字,注意是声明处
  • 为了方便,可以只将基类中的函数声明为虚函数,这样所有派生类中具有遮蔽关系的同名函数都将自动成为虚函数,多继承的时候需要小心。
  • 当在基类中定义了虚函数时,如果派生类没有定义新的函数来遮蔽此函数,那么将使用基类的虚函数。
  • 只有派生类的虚函数覆盖基类的虚函数(函数原型相同)才能构成多态(通过基类指针访问派生类函数)
  • 构造函数不能是虚函数
  • 析构函数可以声明为虚函数,而且**有时候必须要声明为虚函数 **

  • 基类虚函数重载,子类必须遮蔽时(即将父类的重载函数遮蔽)才会调用子类函数

//基类Base
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;
}
//派生类Derived
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();  //输出void Derived::func()
    p -> func(10);  //输出void Base::func(int)
    p -> func("http://c.biancheng.net");  //compile error
    return 0;
}
发布了145 篇原创文章 · 获赞 12 · 访问量 9654

猜你喜欢

转载自blog.csdn.net/weixin_44997886/article/details/104613176