C++核心——繼承

C++核心——繼承

繼承其實最簡單的理解就是一種代碼複用,之前語句複用的時候,我們利用函數實現代碼複用,繼承就是在類的基礎上實現代碼的複用,就是把幾個類共有的部分提取出來,實現複用,簡化代碼結構。當然這是對繼承最簡單的一種理解,繼承還有很多其他的用途。

繼承的基本語法

首先在沒用繼承的時候我們定義兩個類,汽車和飛機,有共同的屬性名稱,共同的行爲就是運輸,但是飛機可以飛,汽車可以倒車(當然現在有的飛機也能自主倒車,倒是一般不會這麼操作,太傷發動機)。那麼我們用代碼實現:

class Bus
{
public:
    string name;

    void transport()
    {
        cout << "運輸" << endl;
    }

    void fly()
    {
        cout << "倒車" << endl;
    }
};

class Plane
{
public:
    string name;

    void transport()
    {
        cout << "運輸" << endl;
    }

    void back_up()
    {
        cout << "飛" << endl;
    }
};

從代碼來看確實重複的部分很多,不符合編程思想,所以這個時候繼承就出來,利用代碼複用來精簡代碼。利用繼承只有的實現如下:

class Transportation
{
public:
    string name;

    void transport()
    {
        cout << "運輸" << endl;
    }
};

class Bus: public Transportation
{
public:
    void fly()
    {
        cout << "倒車" << endl;
    }
};

class Plane : public Transportation
{
public:
    void back_up()
    {
        cout << "飛" << endl;
    }
};

我們在飛機和汽車的基礎再提煉一個交通工具類,用這個類來包含公共部分,這樣當飛機和汽車類繼承了交通工具類以後就會含有公共的東西,然後再定義各自特有的就好,這樣就能實現代碼複用,而且還有一個好處就是如果再來一個輪船類,也包含交通工具類的那些特性,那麼這個類也可以繼續複用這部代碼。

繼承的語法:class 子類 : 繼承方式 父類

繼承的方式

  • 公共繼承 屬性不變
  • 保護繼承 公共變保護,其他不變
  • 私有繼承 陡變私有

這一塊涉及權限,和屬性的權限一樣,打算後面單獨做解釋,像具體瞭解的可以參考另一篇博文《C++核心——類中的權限》

繼承同名成員處理方式

當子類與父類出現同名的成員,訪問子類同名成員 直接訪問即可,訪問父類同名成員 需要加作用域。

class Base {
public:
	Base()
	{
		m_A = 100;
	}

	void func()
	{
		cout << "Base - func()調用" << endl;
	}

	void func(int a)
	{
		cout << "Base - func(int a)調用" << endl;
	}

public:
	int m_A;
};


class Son : public Base {
public:
	Son()
	{
		m_A = 200;
	}

	//當子類與父類擁有同名的成員函數,子類會隱藏父類中所有版本的同名成員函數
	//如果想訪問父類中被隱藏的同名成員函數,需要加父類的作用域
	void func()
	{
		cout << "Son - func()調用" << endl;
	}
public:
	int m_A;
};

void test01()
{
	Son s;

	cout << "Son下的m_A = " << s.m_A << endl;
	cout << "Base下的m_A = " << s.Base::m_A << endl;

	s.func();
	s.Base::func();
	s.Base::func(10);

}
int main() {

	test01();

	system("pause");
	return EXIT_SUCCESS;
}

總結:

  1. 子類對象可以直接訪問到子類中同名成員
  2. 子類對象加作用域可以訪問到父類同名成員
  3. 當子類與父類擁有同名的成員函數,子類會隱藏父類中同名成員函數,加作用域可以訪問到父類中同名函數

多繼承

C++ 中是允許使用多繼承的,即一個類可以繼承多個類,語法class 子類 :繼承方式 父類1 , 繼承方式 父類2...

但是在實際開發不建議使用多繼承。

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