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

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

时间:1970-1-1 08:33:31来源: C/C++作者:admin 点击:0次 字体 [ С]
}
protected:
float _x,_y;
};

   virtual function给Point2d带来的额外负担:

   (a)导入一个和Point2d有关的virtual table,用来存放它声明的每一个virtual function的地址;

   (b)在每一个class object中导入一个vptr;(c)加强constructor和destructor,使它们能设置和抹消vptr.

 class Point3d : public Point2d {
public:
Point3d(float x = 0.0, float y = 0.0,float z = 0.0) : Point2d(x,y),_z(z) {};
float z() { return _z; }
void z(float newZ) { _z = newZ; }
void operator+=(const Point2d& rhs) {  //注意参数是Point2d&,而非Point3d&
Point2d::operator+=(rhs);
_z += rhs.z();
}
protected:
float _z;
};

   自此,你就可以把operator+=运用到一个Point3d对象和一个Point2d对象身上了。

   (3)多重继承(Multiple Inheritance)

   请看以下的多重继承关系:

 class Point2d {
public:
// ...  // 拥有virtual接口
protected:
float _x,_y;
};

class Point3d : public Point2d {
public:
// ...
protected:

发表评论
验证码:
最新评论
相关文章
最热文章