c++类的重用

一.类的组合
当类的成员是另一个类的对象时,就形成了类的组合。
组合类构造函数定义的一般形式如下:
<类名>::<类名>(形参表):内嵌对象1(形参表),内嵌对象2(形参表),..
{
   //其他初始化操作
}
class Point
{
private:
    double x,y;
}; 
class Line
{
private:
    Point pt1;
    Point pt2; 
    double len;   
}
Line::Line(Point p1,Point p2):pt1(p1),pt2(p2)
{
    len=0.0;
}

二.类的继承
class 派生类名:继承方式 基类名1,继承方式 基类名2
{
   派生类成员声明;
};
多继承:一个派生类同时有多个基类
通过公有继承,基类中公有和保护成员的访问属性在派生类中不变,基类中公有成员在派生类中直接访问,私有成员必须通过公有成员GetX(),GetY()才能访问.
*向上转型:
1.公有派生类的对象可以充当一个基类的对象,反之不可以.
2.一个公有派生类对象的指针值可以赋值给(初始化)一个基类指针.
3.一个派生类对象可以初始化一个基类引用.
4.派生类对象可以赋值给一个基类对象.
利用这样的指针或引用,只能访问派生类从基类继承过来的成员,无法访问派生类的自有成员.
(举个栗子):
派生类对象的指针初始化基类指针:
Furniture *sofa2 = new Sofa("钢材",410,1);//new 即为指针
派生类对象初始化一个基类引用:
Furniture &bed2 = *new Bed("竹子",1280,"单人");
将一个派生类对象直接赋值给一个基类:
Furniture bed3 = bed1;

*多继承中同名隐藏和二义性问题
1.在多继承中,一个派生类的多个基类具有同名成员,如果派生类也声明了同名函数时:
默认是访问自己的函数,除非使用域运算符::
如:
class D:public B1,public B2
int main()
{
  D d;
  d.num=1;//访问D类成员  
  d.B1::num=2;//访问B1类成员 
}
*重复继承和虚基类
在多继承中:
class B{...};
class X:public B{...}
class Y:public B{...}
class Z:public X,public Y{...}
这里Z同时继承了X和Y,即重复继承,增加了内存开销,于是c++引入了虚基类的概念
class B{...};
class X:virtual public B{...}
class Y:virtual public B{...}
class Z:public X,public Y{...}
X和Y是对B的虚继承,Z的数据实质上是从B继承过来的.












猜你喜欢

转载自blog.csdn.net/qq873044564/article/details/80433028