同名函式的三種關係(過載,隱藏,覆蓋)

2021-09-25 19:02:02 字數 1680 閱讀 7617

1.過載

class base

void show(int i) };

這兩個函式就構成了過載,在相同的作用域內,函式名相同,引數不同

2.隱藏

隱藏很簡單,就是派生類中的函式會隱藏基類中同名的函式,無關其他

class base

};class derive :public base

};

隱藏發生後,父類還是呼叫父類的函式,子類還是呼叫子類的函式

3.覆蓋

class base

void show(int i) };

class derive :public base

};int main()

定義乙個基類的指標指向子類的物件,呼叫show函式的時候派生類會把基類的show函式覆蓋,所以呼叫的是派生類的

面試點1.派生類繼承了基類的什麼?

我們通過下面一段**看一下

#include#includeclass people

void eat()

static int ma;

void show()

typedef int elem_type;

protected:

std::string mname; //28

int mage; // 4

bool m***; // 4

};int people::ma = 10; //靜態的成員變數需要在類外初始化

class student : public people

protected:

std::string mid;//28

};int main()

{ student stu("zhangsan", 20, true, "001");

stu.eat();

std::cout << sizeof(student) << std::endl;

std::cout << sizeof(people) << std::endl;

std::cout所以派生類繼承了父類中除了建構函式和析構函式意外所有的成員。

2.派生類的記憶體布局

基類的布局優先於派生類

3.派生類的析構方式和構造方式

又上圖可以看出,父類先構造,然後子類在構造;在析構的時候正好相反,子類先析構,父類在析構

4.繼承方式的許可權

1.子類無法訪問父類中的private成員

2.父類的protected成員可以被子類訪問,但是不可以被外部訪問

3.private會被繼承,但是無法訪問

4.class中預設的方式是private,繼承預設也是private方式

5.父類中成員通過相應的繼承方式繼承給子類後,這些成員對於子類來說,訪問許可權以繼承的等級為最低級別。例如:父類中a為private許可權,無論通過什麼方式都不可以訪問該變數

5.類和類的關係

1.組合   a part of  has_a

2.繼承   a kind of  is_a

3.**

類中的同名函式關係,過載,覆蓋 重寫,隱藏

對於類中的同名函式,過載,覆蓋 重寫,隱藏 c 特性,不是類亦可以實現過載,與virtual無關聯。過載 同一類域抑或無類域,相同函式名,不同形參個數或型別 由形參決定呼叫哪個函式實現。同類域同名函式相同形參會引起編譯錯誤。virtual修飾函式需要相同的返回值與形參型別,多型特性則需要該修飾符才能...

c 覆蓋 過載 隱藏 的關係

過載 只有在同一類定義中的同名成員函式才存在過載關係,主要特點是函式的引數型別和數目有所不同,但不能出現函式引數的個數和型別均相同,僅僅依靠返回值型別不同來區分的函式,這和普通函式的過載是完全一致的。另外,過載和成員函式是否是虛函式無關 覆蓋 在派生類中覆蓋基類中的同名函式,要求兩個函式的引數個數 ...

函式的過載,覆蓋,隱藏區別

過載 指同一可訪問區內被宣告的幾個具有不同引數列 引數的型別,個數,順序不同 的同名函式,根據引數列表確定呼叫哪個函式,過載不關心函式返回型別。注意是相同的範圍 同乙個類 函式名相同,引數不同,跟virtual 沒有關係。覆蓋 也翻譯成重寫,指派生類中存在重新定義的函式。其函式名,引數列表,返回值型...