博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将类的方法声明为虚函数的作用
阅读量:2385 次
发布时间:2019-05-10

本文共 769 字,大约阅读时间需要 2 分钟。

把成员函数声明为虚函数的主要目的是为了支持多态,比如我们有一个基类 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() 这就需要一些额外的数据结构,以及额外的判断。所以对要求高效的程序中,对非基类,最好不要将其析构函数声明为虚函数。
另外,如果希望自己写的类只被做为基类,即希望它是一个抽象类,那么我们一般会在这个类中声明一些纯虚函数,这时我们就可以把它的析构函数声明为纯虚函数。

转载地址:http://lxnab.baihongyu.com/

你可能感兴趣的文章
NagVis实物监控工具
查看>>
nginx - low risk webdav destination bug
查看>>
Lessons Learned from Building and Running MHN, the World's Largest Crowdsourced Honeynet
查看>>
Logwatch Linux/Unix系统日志检测软件
查看>>
减少Linux下Squid服务器的TIME_WAIT套接字数量
查看>>
KeePass和PuTTY的结合使用--自动登陆
查看>>
/etc/sudoers中的含义
查看>>
Five must-know open source SDN controllers
查看>>
Finding Bad Guys with 35 million Flows, 2 Analysts, 5 Minutes and 0 Dollars
查看>>
SANS FOR572 Logstash
查看>>
apt成熟度模型
查看>>
Digital Forensics Framework v0.4.3 available
查看>>
linux设置bond网卡绑定
查看>>
Is your .svn showing (like 3300 other sites)?
查看>>
PCI DSS Update Could Include Virtualization Security(转载自baoz)
查看>>
List of Windows Auto Start Locations
查看>>
OSSIM 2.1 - Multiple security vulnerabilities
查看>>
PHP文件上传源码分析(RFC1867)
查看>>
关于php5.*后的时区问题 date_default_timezone_set ();
查看>>
SX 4th meetup – Hunting Rootkit From the Dark Corners Of Memory
查看>>