当前位置: 网站首页 > 开发语言 > C/C++

《深度探索C++对象模型》读书笔记(5)

时间:1970-1-1 08:33:31来源: C/C++作者:admin 点击:0次 字体 [ С]

  ***纯虚拟函数***

   在设计抽象基类时,需要注意以下几点:

   (1)不要将destructor声明为pure virtual function;

   如果将destructor声明为pure virtual function,则设计者一定得定义它。因为每一个derived class destructor会被编译器加以扩展,以静态调用得方式调用其“每一个virtual base class”以及“上一层base class”的destructor.

   (2)不要将那些函数定义内容并不与类型有关的函数设计为virtual function,因为其几乎不会被后继的derived class改写。

   (3)对于其derived class可能修改某一个data member的函数,不应被声明为const.

   ***“无继承”情况下的对象构造***

   先定义class Point:

 class Point {
public:
Point(float x = 0.0, float y = 0.0) : _x(x),_y(y) {}
virtual float z();
protected:
float _x,_y;
};

   你可不能小看z()这个virtual function给class Point带来的巨大变化。virtual function的引入促使每一个class Point拥有一个vtpr,这样一来,编译器在constructor中添加了对vptr进行初始化的代码,而copy constructor和copy assignment operator也会对vptr进行设定,而不再是原先简单的bitwise操作了。

发表评论
验证码:
最新评论