将类的方法声明为虚函数的作用

把成员函数声明为虚函数的主要目的是为了支持多态,比如我们有一个基类 Shape 和一个派生类 Circle ,代码如下:
class Shape{
public:
    Shape(){};
    virtual ~Shape(){};
    
    virutal void Draw();
};
class Circle: public Shape{
    Circle(){};
    virutal ~Circle(){};
    
    virtual void Draw();
};

int main(){
    Shape * s=new Circle;
    s->Draw();
    delete s;
}



这里我们将 Draw 声明为虚函数,这样在执行 s->Draw() 时调用的就会是 Circle::Draw() ,这也正是我们想要的。
同样,把析构函数声明为虚函数也是这个目的,如果我们不把析构函数声明为虚函数,那么执行 delete s 时调用的将是 Shape::~Shape() ,而不会调用 Circle::~Circle() ,也就是说我们对一个 Circle 类调用了其它类的析构函数,结果可想而知了。所以如果我们希望自己写的类可以用来做基类,那么就需要将类的析构函数声明为虚函数。

但是如果我们不希望自己的类被做为基类,那么就不应该将它的析构函数声明为虚函数。虚函数是要花代价的,因为对一个指针 s ,我们得去判断到底调用哪个类的 Draw() 这就需要一些额外的数据结构,以及额外的判断。所以对要求高效的程序中,对非基类,最好不要将其析构函数声明为虚函数。

另外,如果希望自己写的类只被做为基类,即希望它是一个抽象类,那么我们一般会在这个类中声明一些纯虚函数,这时我们就可以把它的析构函数声明为纯虚函数。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值