C++中继承关系简介

继承

单继承

class SubClass:[继承方式]ParentClass
{
//variables
};

子类成员对基类成员的访问方式:继承方式

子类成员对基类成员的访问方式的限制是由继承方式决定的,

class A {
public: 
         x;
protected:
         y;
private:
         z;
};

class B:[public/protected/private]A{

};



继承方式 基类成员 子类成员访问 子类中的成员函数 子类的对象
public public
protected
private
public
protected
不可访问
可以访问基类的public和protected成员 可以访问基类的public和protected成员
protected public
protected
private
protected
protected
不可访问
可以访问基类的public和protected成员 不能访问基类中的所有成员
private public
protected
private
private
private
不可访问
可以访问基类的public和protected成员 不能访问基类中的所有成员

public继承方式

如果子类对父类以public的方式继承,那么父类中的成员的属性在子类中保持不变。父类的private成员为其私有成员,子类无法访问。

protected继承

如果子类对父类以protected的方式继承,那么父类中的public/protected成员相当于子类的private成员。父类的private成员为其私有成员,子类无法访问。

private继承

如果子类对父类以private的方式继承,那么父类中的public/protected成员相当于子类的private成员。父类的private成员为其私有成员,子类无法访问。


子类的构造函数

class A
{
public: 
       A(int m) {num=m;};
private:
      int num;
};

class SubClass: public A {
public:
        SubClass(int a, string s):A(a) {
                  s = s;
        }
private:
        string s;
};
当初始化SubClass的构造函数时,先初始化其父类A的构造函数,然后才初始化基类的构造函数。

多继承

class A {
public:
        A(B b){
       }
};

Class B {
};
Class C: public A{
public:
         C(B b):A(b), b(b) {
         }
private:
          B b;
};
在多继承时,父类和成员的初始化按照下列规则:
1,基类按照继承顺序从左到右调用构造函数初始化
2,调用成员变量的构造函数初始化,按照声明顺序,从上到下
3, 如果没有成员变量初始化,跳过2步骤,直接初始化子类构造函数的函数体。

虚基类 virtual

当一个子类的多个父类同时从另一个共同的父类派生时,多个父类中拥有从同一父类继承来的同名的成员,在 子类中,这些同名成员在内润中拥有多个副本,同一个函数名拥有多个映射。使用虚基类,可以解决这类问题;
class Subclass:<strong>virtual</strong> public A

虚基类的初始化

通常,每个类只初始化自己的直接基类。在整个继承关系中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化列表中列出对虚基类的初始化。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章