C++中的继承与派生

C++中为了增加代码的复用性,引入了继承的概念

1.继承的定义:用已经创建好的类来创建新的类,新类具有原来类的属性和成员,而且可以对原先的类进行修补。新类称为子类或者派生类,旧类称为基类或者父类。

派生类定义:

class 派生类名 :继承类型 基类名

{

            。。。。(成员变量)

};

2.继承权限:

(注意,父类中的所有private,在子类的内部和外部都不能进行访问,以下省略)

public继承:

父类中的public,在子类中也是public,类的内部和外部都能访问。

父类中的protected,在子类中是protected,类的内部可以访问,外部无法访问

protected继承:

父类中的public:在子类中是protected,类的内部可以访问,外部无法访问

父类中的proteced,在子类中是protected,类的内部可以访问,外部无法访问

private继承:

父类的public:在子类中是private,类的内部可用,外部不可用

父类的protected,在子类中是private,类的内部可用,外部不可用

不声明默认继承为private。

一般声明为public

3.构造与析构

遵循一个原则,先构造父类,再构造子类,析构正与其相反

etc:  class A

{

protected:

        int ma;

public:

        A(int a){ma = a; cout<<"A构造"<<endl;}

       ~A(){cout<<"A析构"<<endl;}

};

class B: public A

{

protected:

        int mb;

public:

        B(int a,int b)  :  A(a)     //构造时,需要调用父类构造函数,所以需要初始化列表  

        {mb = b;cout<<"B构造"<<endl;}

        ~B(){cout<<"B析构"<<endl;}

};

输出为  A构造 B构造 B析构 A析构


4.多继承

一个子类继承多个父类

格式  class 子类名 :继承权限  父类名1,继承权限  父类名2

{

};

拥有多个父类的成员函数

如果父类中有重名函数及成员现象 需要添加限定域作用符::

etc  B a1(2.3);

a1.A::print();      && a1.C::print();

如果出现子类(暂称D)继承的两个父类(暂称B,C)同时继承个父类(暂称A),而D类需要调用A类的成员,

如果单调用的话会歧义,因为B和C调用了两个A类的构造,所以编译器不会知道是谁的,所以会出现歧义。要解决这个现象,需要在定义时加virtual

etc :

格式  class 子类名 :virtual 继承权限  父类名1

{

};


猜你喜欢

转载自blog.csdn.net/inconceivableccx/article/details/79953044