派生类中重新定义虚函数及虚函数的注意事项

在派生类中重新定义虚函数时,不需加关键字virtual但是必须要和父类中的同名,同返回类型,同参数列表

例外

父类可以返回父类指针
派生类可以返回派生类指针

class base
{
public:
    base* show()
    {
        cout<<"this is base show()!"<<endl;
        return this;
    }
};

class D : public base
{
public:
    D* show()
    {
        cout<<"this is D show()!"<<endl;
        return this;
    }
};

void main()
{
    D d;
    base *p = &d;
    p->show();    //调用base中的show方法
}

1.只有类的成员函数才能做虚函数
2.静态成员函数是所有同类对象所共有的,不能作为虚函数
3.全局函数不能做虚函数
4.内联函数不能做虚函数
5.构造函数不能定义为虚函数(因为在调用构造函数的时候对象还没有完全初始化)
6.析构函数可以定义为虚函数(在父类及其派生类中都动态分配内存空间时,必须把父类的析构函数定义为虚函数,实现撤销对象时的多态性)

class base
{
public:
     base()   //父类构造函数
     {
         cout<<"create base!"<<endl;
     }
     ~base()  //父类析构函数
     {
         cout<<"free base!"<<endl;
     }
}; 

class D : public base
{
public:
    D()
    {
        cout<<"create D!"<<endl;
    }
    ~D()
    {
        cout<<"free D!"<<endl;
    }
};

void main()
{
    base *p = new D;    //分配动态内存
    delete p;           //释放内存
}

执行结果:
未将父类的析构函数设成虚函数时:

create base!
create D!
free base!

将父类的析构函数设成虚函数时:

create base!
create D!
free D!
free base!

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值