虚函数(C++)

析构函数设置成虚函数正是体现了C++的多态性。当基类的指针指向子类时,析构的时候,如果析构函数不是虚函数的话,这样只会调用基类的析构函数。子类则不会被析构,这样就造成了内存泄露。如果定义成虚函数,那么则会先找到子类的析构函数,析构之后,再调用基类的析构函数。有些人设成虚函数是为了触发基类的析构函数,我觉得理解的不是太彻底,应该是虚函数只是为了找到子类的析构函数,而触发基类的析构函数是由子类时继承了基类才自然的就会调用基类的析构函数。


虚函数的实现。


class base
{
    public:base()
    {
        cout<<"base consttruction"<<endl;
    }
    virtual print()
    {
        cout<<"base print"<<endl;
    }
};

class child : public base
{
    public:child()
    {
        cout<<"child contruction"<<endl;
    }
    virtual print()
    {
        cout<<"child print"<<endl;
    }
};
void main()
{
    base m_b;
    child m_c;
    base * pb = &m_b;pb->print();
    pb = &m_c;pb->print();
}


运行的结果:
 
base consttruction          父类对象构造
base consttruction          先调用父类构造函数
child contruction              再调用子类构造寒素
base print                        虚函数的多态性
child print
Press any key to continue

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值