C++——類的繼承(派生)

類的繼承就是子類可以擁有父類的成員變量和成員函數

 

//public 修飾的成員變量 方法 在類的內部 類的外部都能使用
//protected: 修飾的成員變量方法,在類的內部使用 ,在繼承的子類中可用 ;其他 類的外部不能被使用
//private: 修飾的成員變量方法 只能在類的內部使用 不能在類的外部。子類可以繼承,但不能使用

類的調用語法

class Parent
{
public:
            int a; 
protected:
            int b; 
private:
            int c; 
};



class Child : protected Parent
{
public:
protected:
private:

};

 

一、不同的繼承方式會改變繼承成員的訪問屬性

1)C++中的繼承方式會影響子類的對外訪問屬性

public繼承:父類成員在子類中保持原有訪問級別

private繼承:父類成員在子類中變爲private成員

protected繼承:父類中public成員會變成protected

                            父類中protected成員仍然爲protected

                            父類中private成員仍然爲private

2)private成員在子類中依然存在,但是卻無法訪問到。不論種方式繼承基類,派生類都不能直接使用基類的私有成員

3)C++中子類對外訪問屬性表

 

父類成員訪問級別

 

public

proteced

private

public

public

proteced

private

proteced

proteced

proteced

private

private

private

private

Private

二、兼容性原則


/*
兼容規則中所指的替代包括以下情況:
1)子類對象可以當作父類對象使用
2)子類對象可以直接賦值給父類對象
3)子類對象可以直接初始化父類對象
4)父類指針可以直接指向子類對象
5)父類引用可以直接引用子類對象
*/

#include <iostream>
using namespace std;

class Parent
{
public:
    void printP()
    {
        cout<<"我是爹..."<<endl;
    }

    Parent()
    {
        cout<<"parent構造函數"<<endl;
    }

    Parent(const Parent &obj)
    {
        cout<<"copy構造函數"<<endl;
    }

private:
    int a;
};

class child : public Parent
{
public:
    void printC()
    {
        cout<<"我是兒子"<<endl;
    }
protected:
private:
    int c;
};





//C++編譯器 是不會報錯的 .....
void howToPrint(Parent *base)
{
    base->printP(); //父類的 成員函數 

}

void howToPrint2(Parent &base)
{
    base.printP(); //父類的 成員函數 
}
void main()
{
    //

    Parent p1;
    p1.printP();

    child c1;
    c1.printC();
    c1.printP();


    //賦值兼容性原則 
    //1-1 基類指針 (引用) 指向 子類對象
    Parent *p = NULL;
    p = &c1;
    p->printP();  

    //1-2 指針做函數參數

    howToPrint(&p1);
    howToPrint(&c1); 

    //1-3引用做函數參數
    howToPrint2(p1);
    howToPrint2(c1); 


    //第二層含義

    //可以讓子類對象   初始化   父類對象
    //子類就是一種特殊的父類
    Parent p3 = c1;


    cout<<"hello..."<<endl;
    system("pause");
    return ;
}

 

三、繼承中的構造析構調用原則

         原則:    先構造父類,再構造成員變量、最後構造自己

                          先析構自己,在析構成員變量、最後析構父類

                          //先構造的對象,後釋放

四、繼承中的同名成員變量處理方法

1、當子類成員變量與父類成員變量同名時

2、子類依然從父類繼承同名成員

3、在子類中通過作用域分辨符::進行同名成員區分(在派生類中使用基類的同名成員,顯式地使用類名限定符

4、同名成員存儲在內存中的不同位置