ITPub博客

首页 > 应用开发 > IT综合 > 读书笔记:11章什么时间不适合使用虚函数2

读书笔记:11章什么时间不适合使用虚函数2

原创 IT综合 作者:karlyang88 时间:2007-01-22 14:54:56 0 删除 编辑
C++沉思录第十一章读书笔记2[@more@]

11-2-3 不是所有的类都是通用的

类的接口由公有成员组成,类的实现由其他东西组成。而接口是一种与用户交流的方式。类可是有两种用户:使用该类对象的人和从这个类派生类的人。

如果我花时间考虑他人将如何扩展这个类的话,就会占用本来应该花在其他设计上的时间。

11-3 析构函数很特殊

当使用一个基类指针或引用来指向或者引用一个派生类对象时。虚函数。

class Base {

public:

void f();

virtual void g();

};

class Derived: public Base {

public:

void f();

virtual void g();

};

Base b;

Derived d;

Base* bp = &b;

Base* bq = &d;

Derived* dp = &d;

这里,bp指向一个Base对象,bq和dp指向Derived对象。如果我们用这些指针调用成员函数f和g会出现什么情况呢?

bp->f(); /* Base::f / bp->g(); /* Base::g */

bq->f(); /* Base::f / bq->g(); /*Derived::g */

dp->g(); /*Derived::g / dp->f(); /*Derived::f */

当下面两件事情同时发生时就要用虚析构函数了:

有需要析构函数的事情发生

他发生在这样一种上下文中:指向一个基类的指针或者引用都有一个静态类型,并且实际上都指向一个派生类的对象。

Base* bp;

Derived* dp;

bp = new Derived;

dp = new Derived;

delete bp; //Base 必须有一个虚析构函数

delete dp; //

我们这里用一个基类指针删除一个派生类对象。

另外,如果一个类的基类有一个虚析构函数,那么这个类也自动获得一个虚析构函数。

11-4 小结

三个原因不用:有时很大消耗;不总是提供所需的行为;有时我们写一个类时,不考虑派生问题。

必须使用:当你想删除一个表面指向基类对象,实际却是指向派生类对象的指针时。

写程序时我们必须考虑自己正在做什么,仅仅根据规则和习惯思维是不够的。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/409557/viewspace-892343/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    35
  • 访问量
    336363