繼承(針對C++)

來源:互聯網
上載者:User

繼承是一個重用和擴充現有類而無需修改該類的機制,從而在兩者之間形成層級關係。

繼承差不多是吧一個對象嵌入到另外一個對象。假設你在類 B 的定義中聲明類 A 的一個對象 x 對象,結果,類 B 將能夠訪

問類 A 所有的公用的資料成員以及成員函數。然而,在類 B 中,你想要訪問類 A 的所有的公用資料成員以及成員函數,需

要通過類 A 的對象 x。 下面的例子樣本這些:

 1 #include <iostream>
2 using namespace std;
3
4 class A {
5 int data;
6 public:
7 void f(int arg) { data = arg; }
8 int g() { return data; }
9 };
10
11 class B {
12 public:
13 A x;
14 };
15
16 int main() {
17 B obj;
18 obj.x.f(20);
19 cout << obj.x.g() << endl;
20 // cout << obj.g() << endl;
21 }

在主函數中,對象 obj 利用語句 obj.x,f(20) 通過它的資料成員 B::x 訪問函數 A::f()。 對象 obj 利用語句 obj.x.g()

以類似的方式訪問 A::g()。 由於 g() 是類 A 的成員函數,而不是類 B 的成員函數,編譯器將不允許語句 obj.g() 通過。

繼承機制允許你使用相似於上面例子中的語句 obj.g() 。為了讓該語句合法, g() 必須是類 B 的成員函數。

繼承允許你將另外一個類成員的名稱以及定義作為新類的一部分。某個類,你想將其成員包含到你的新類,這個類稱為基類。

下面的例子和上面的例子一樣,除了它用了繼承機制,允許類 B 訪問類 A 的成員。

 1 #include <iostream>
2 using namespace std;
3
4 class A {
5 int data;
6 public:
7 void f(int arg) { data = arg; }
8 int g() { return data; }
9 };
10
11 class B : public A { };
12
13 int main() {
14 B obj;
15 obj.f(20);
16 cout << obj.g() << endl;
17 }

類 A 是類 B 的基類。 類 A 成員變數的名稱和定義都包含在類 B 的定義中。類 B 繼承類 A 的成員。類 B 是類 A 的派生

類。 類 B 包含 A 類型的子物件。

你可以同樣添加新的資料成員和成員函數到衍生類別。你可以通過覆蓋基類成員函數或者資料在新派生的類中修改已經存在的成

員函數或者資料。

你可以從其他衍生類別中派生新類,從而建立另外一個層級的繼承。下面的例子樣本這些:

1 struct A { };
2 struct B : A { };
3 struct C : B { };

類 B 是類 A 的衍生類別,但是同時是類 C 的基類。 繼承的層級僅僅受限於資源。(也就是說,只要記憶體足夠,我們就可以無

限制派生)

多重繼承允許你建立一個衍生類別,其從多個基類繼承屬性。因為一個衍生類別繼承所有的基類成員,有可能導致混淆(形成衝突

)。例如,如果兩個基類包含具有相同名稱的變數,衍生類別不能隱式確定兩個變數的差異。注意,當你使用多繼承,訪問基類

成員的名稱可能會形成混淆。

直接基類:就是一個衍生類別在聲明的時候,直接緊跟在“:”號後面的類。
間接基類:

1 class A {
2 public:
3 int x;
4 };
5 class B : public A {
6 public:
7 int y;
8 };
9 class C : public B { };

類 B 是一個類 C 的直接基類。 類 A 是類 B 的直接基類。 類A 是類 C 的間接基類。(類 C 擁有 成員變數 x 和 y)

Polymorphic functions are functions that can be applied to objects of more than one type.

多態函數指的是可以被應用多種資料類型的函數。在C++中, 多態函數有兩種實現方式:

  • 重載函數——在編譯期間靜態繫結。
  • C++提供的虛函數。虛函數在運行期間動態綁定。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.