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:
