C 繼承中的同名覆蓋

2022-08-18 10:21:09 字數 2836 閱讀 6166

1,父子間的衝突是由繼承帶來的,兩個類之間存在了繼承的關係,必然的會帶來一 些問題,本文要討論的是父子之間成員變數或成員函式的命名問題;

2,思考:

1,子類中是否可以定義父類中的同名成員?

1,可以,本文先程式設計解決這個問題;

2,這個問題就是同名覆蓋問題;

2,如果可以,如何區分?如果不可以,為什麼?

3,同名成員變數程式設計實驗:

1 #include 2 #include 34

using

namespace

std;56

class

parent7;

1112

class child : public

parent13;

1718

intmain()

19

4,父子間的衝突(同名覆蓋):

1,子類可以定義父類中的同名成員;

2,子類中的成員將隱藏父類中的同名成員;

1,編譯器認為已經從父類中繼承得到這個成員了,又自定義了乙個同名成員,目的只有乙個,就是你想要自己自定義的同名成員、而不想要從父類那裡繼承得到的同名成員,因此會產生同名覆蓋現象;

3,父類中的同名成員依然存在於子類中;

1,隱藏、不是銷毀;

4,通過作用域分辨符(::)訪問父類中的同名成員;

5,訪問父類中的同名成員方式:

1,child c;

2,c.mi = 100;  // 子類中的 mi;

3,c.parent::mi = 1000;  // 父類中的 mi;

6,同名成員變數深度分析程式設計實驗:

1 #include 2 #include 34

using

namespace

std;56

namespacea7

1011

namespaceb12

1516

class

parent

1725

};26

27class child : public

parent

2836

};37

38int

main()

39

1,父類和子類可以產生同名覆蓋衝突,但是通過作用域分辨符可以解決這個問     題;

7,再論過載:

1,類中的成員函式可以進行過載:

1,過載函式的本質為多個不同的函式;

2,函式名和引數列表是唯一的標識;

3,函式過載必須發生在同乙個作用域中;

8,問題:

1,子類中定義的函式是否能過載父類中的同名函式?

1,將父子間的衝突問題上公升到成員函式了;

9,父子間的函式過載程式設計實驗:

1,繼承父類成員函式,累加父類的同名成員;

1 #include 2 #include 34

using

namespace

std;56

class

parent715

16void add(int a, int

b)17

20};

2122

class child : public

parent23;

2728

intmain()

29

2,函式的同名覆蓋:

1 #include 2 #include 34

using

namespace

std;56

class

parent715

16void add(int a, int

b)17

20};

2122

class child : public

parent

2331

};32

33int

main()

34

10,父子間的衝突:

1,子類中的函式將隱藏父類的同名函式;

2,子類無法過載父類中的成員函式;

1,因為它們處於不同的作用域;

3,使用作用域分辨符訪問父類中的同名函式;

1,類名加上作用域分辨符;

4,子類可以定義父類中完全相同的成員函式;

1 #include 2 #include 34

using

namespace

std;56

class

parent715

16void add(int a, int

b)17

20};

2122

class child : public

parent

2331

32void add(int a, int b) //

同名覆蓋;函式重寫;

3336

37void add(int x, int y, int z) //

過載;38

41};

4243

intmain()

44

11,小結:

1,子類可以定義父類中的同名成員;

2,子類中的成員將隱藏父類中的同名成員;

1,包括同名成員變數和同名成員函式;

2,重寫的依據;

3,這就是同名覆蓋;

3,子類和父類中的函式不能構成過載關係;

1,作用域不同;

4,子類可以定義父類中完全相同的成員函式;

1,作用域不同;

5,使用作用域分辨符訪問父類中的同名成員;

1,父類名加上作用域分辨符;

C 繼承 同名隱藏 覆蓋,虛函式

不同作用域宣告的識別符號的可見性原則 如果存在兩個或多個具有包含關係的作用域,外層宣告了乙個識別符號,而內層沒有再次宣告同名識別符號,那麼外層識別符號在內層依然可見,如果在內層宣告了同名識別符號,則外層識別符號在內層不可見,這時稱內層識別符號隱藏了外層同名識別符號,這種現象稱為隱藏規則。在類的派生層...

c 繼承中同名成員處理

所謂同名成員也就是 子類與父類 變數或者成員函式重名 看看以下 了解訪問方式 1 include2 using namespace std 34 class father512 void fun int x 13 17protected 18 intb 19private 20 intc 21 22...

C 之同名覆蓋 多型

一.同名覆蓋引發的問題 父子間的賦值相容 子類物件可以當作父類物件使用 相容性 1.子類物件可以直接賦值給父類物件 2.子類物件可以直接初始化父類物件 3.父類指標可以指向子類物件 4.父類引用可以直接引用子類物件 示例 include include using namespace std cla...