C++繼承

來源:互聯網
上載者:User
簡單繼承

繼承是C++的特性,它可以建立一個類,繼承一個已知的類,衍生類別自動擁有了基類的成員。繼承的形式如下:

class derived_class_name: public base_class_name
{ /*...*/ };

其中public表示繼承方式,可以替代為protected和private,如果省略繼承方式,對'class'將採用私人繼承,對'struct'將採用公有繼承。

範例程式碼如下:

// derived classes
#include <iostream>
using namespace std;

class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b;}
};

class CRectangle: public CPolygon {
public:
int area ()
{ return (width * height); }
};

class CTriangle: public CPolygon {
public:
int area ()
{ return (width * height / 2); }
};

int main () {
CRectangle rect;
CTriangle trgl;
rect.set_values (4,5);
trgl.set_values (4,5);
cout << rect.area() << endl;
cout << trgl.area() << endl;
return 0;
}

protected修飾符類似private,唯一不同是,繼承的時候,當一個類從另一個類繼承,衍生類別中的成員可以訪問受保護的從基類繼承的成員,但不是它的私人成員。

根據訪問方式,我們可以總結出下面的訪問類型:

Access public protected private
members of the same class yes yes yes
members of derived classes yes yes no
not members yes no no

 

三種繼承方式

之前提到繼承方式,分別有:公有繼承(public)、私人繼承(private)、保護繼承(protected)。

  1. 公有繼承(public)

  公有繼承的特點是基類的公有成員和保護成員作為衍生類別的成員時,它們都保持原有的狀態,而基類的私人成員仍然是私人的,不能被這個衍生類別的子類所訪問。

  2. 私人繼承(private)

  私人繼承的特點是基類的公有成員和保護成員都作為衍生類別的私人成員,並且不能被這個衍生類別的子類所訪問。

  3. 保護繼承(protected)

  保護繼承的特點是基類的所有公有成員和保護成員都成為衍生類別的保護成員,並且只能被它的衍生類別成員函數或友元訪問,基類的私人成員仍然是私人的。

繼承的成員

原則上,衍生類別不會繼承基類的以下成員:
1.基類的構造和解構函式
2.基類的=()成員函數
3.基類的友元

雖然基類的建構函式和解構函式沒有被繼承,一個衍生類別的新對象被建立或銷毀時總是會調用基類的預設建構函式(即,它不帶參數的建構函式)和它的解構函式。

如果基類沒有預設建構函式,一個重載的建構函式被調用建立一個新的派生對象時,您可以在每個衍生類別的建構函式中定義:

derived_constructor_name (parameters) : base_constructor_name (parameters) {...}

例如:

// constructors and derived classes
#include <iostream>
using namespace std;

class mother {
public:
mother ()
{ cout << "mother: no parameters\n"; }
mother (int a)
{ cout << "mother: int parameter\n"; }
};

class daughter : public mother {
public:
daughter (int a)
{ cout << "daughter: int parameter\n\n"; }
};

class son : public mother {
public:
son (int a) : mother (a)
{ cout << "son: int parameter\n\n"; }
};

int main () {
daughter cynthia (0);
son daniel(0);

return 0;
}

 

多繼承

C++支援一個類繼承多個類,例如

class CRectangle: public CPolygon, public COutput;
class CTriangle: public CPolygon, public COutput;

完整例子如下:

// multiple inheritance
#include <iostream>
using namespace std;

class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b;}
};

class COutput {
public:
void output (int i);
};

void COutput::output (int i) {
cout << i << endl;
}

class CRectangle: public CPolygon, public COutput {
public:
int area ()
{ return (width * height); }
};

class CTriangle: public CPolygon, public COutput {
public:
int area ()
{ return (width * height / 2); }
};

int main () {
CRectangle rect;
CTriangle trgl;
rect.set_values (4,5);
trgl.set_values (4,5);
rect.output (rect.area());
trgl.output (trgl.area());
return 0;
}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.