繼承,過載函式,派生函式

2021-07-16 22:07:21 字數 2350 閱讀 9208

繼承(inheritance)

可以理解為乙個類從另乙個類獲取成員變數和成員函式的過程。例如類b繼承於類a,那麼b就擁有a的成員變數和成員函式。

被繼承的類稱為父類或基類,繼承的類稱為子類或派生類。

使用繼承的好處還有什麼時候使用繼承

1) 當你建立的新類與現有的類相似,只是多出若干成員變數或成員函式時,可以使用繼承,這樣不但會減少**量,而且新類會擁有基類的所有功能。

2) 當你需要建立多個類,它們擁有很多相似的成員變數或成員函式時,也可以使用繼承。可以將這些類的共同成員提取出來,定義為基類,

定義方式為:

class 派生類名:[繼承方式] 基類名(父類);
繼承方式包括 public(公有的)、private(私有的)和 protected(受保護的),此項是可選的,如果不寫,那麼預設為 private(私有的)或者protected。

例如://繼承

#include

using namespace std;

class point

void move(float xo,float yo)

float getx()

float gety()

private:

float x,y;

};class rectangle:public point

float getw()

float geth()

private:

float w,h;

};int main() 重點

1) public繼承方式

2) protected繼承方式

3) private繼承方式

基類中所有protected成員和private成員在派生類中可以被呼叫;

由此可見:

private 繼承限制太多,實際開發中很少使用,一般使用 public。

在建構函式中,子類無法取得父類的私有屬性,只能借助 父類的成員函式來間接訪問。,然後在子類呼叫父類public裡面的成員函式

類a為基類,類b繼承自類a,類c又繼承自類b,那麼類c也是類a的派生類,它們構成了多級繼承的關係

//多重繼承

#include

using namespace std;

class  a

};class  b

};class c:public a,privateb

};int main()

//私有繼承: public裡面的資料和函式可以訪問。private不能訪問,protected可以訪問:

//重點);

//私有繼承的派生類例項不能直接訪問父類的成員變數和函式,

過載函式:

過載函式;在乙個類中,有兩個名字相同的函式,函式名一樣,重而形成過載函式

函式的引數型別不一樣

int add(int x,int y)

flost add(float x,float y)

函式的引數個數不一樣

int add(int x,int y)

int add(int x,int y,int z)

//過載函式

#include

using namespace std;

class  a

float add(double x,double y)

};int main()

//float型在c++裡面預設為double

特別注意:

#include

using namespace std;

class b1

};class b2

};class b3

};class c:public b3,public b2,public b1      //呼叫父類的建構函式,傳值

private:                     //派生類的私有物件成員

b1 memberb1;

b2 memberb2;        //上到下的順序

b3 memberb3;

};int main()

//執行結果為

//建構函式的呼叫次序:1:按照建構函式的呼叫次序

//重點 :

c(int a,int b,int c,int d):b1(a),memberb2(d),memberb1(c),b2(b){}  呼叫父類的建構函式,傳值

//2:成員變數

變成類,按照順序執行

虛擬繼承,過載,隱藏

1.為什麼要引入虛擬繼承 虛擬繼承是多重繼承中特有的概念。虛擬基類是為解決多重繼承而出現的。如 類d繼承自類b1 b2,而類b1 b2都繼承自類a,因此在類d中兩次出現類a中的變數和函式。為了節省記憶體空間,可以將b1 b2對a的繼承定義為虛擬繼承,而a就成了虛擬基類。實現的 如下 class a ...

構造方法 繼承 過載

1.構造方法 構造方法是一種特殊的方法,方法名和類名相同,沒有返回值 構造方法 就是給類中的各屬性進行初始化 構造方法的特點 方法名與類名相同 沒有返回值這一功能 空參的構造方法 public dog 帶引數的構造方法 public dog string name 注意 每乙個類中都有乙個預設空參的...

繼承 過載 重寫

一 過載和重寫 過載 方法名相同,引數不同 引數型別或者引數個數 可以存在不同的返回值 重寫 1 方法名相同 2 引數相同 引數型別和引數個數 3 返回值型別為基本資料型別時 返回值型別需和父類相同。返回值為引用型別時 返回值型別相同或者返回值型別是父類返回值型別的子類 4 訪問修飾符相同或者比父類...