C++筆記 第四十七課 父子間的衝突---狄泰學院
阿新 • • 發佈:2018-12-01
如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。
學習C++編譯環境:Linux
第四十七課 父子間的衝突
1.思考
子類中是否可以定義父類中的同名成員?如果可以,如何區分?如果不可以,為什麼?
47-1 同名成員變數
#include<iostream> #include<string> using namespace std; class Parent { public: int mi; }; class Child : public Parent { public: int mi; }; int main() { Child c; c.mi = 100; //Whether mi is a subclass custom or is derived from a parent class. //mi究竟是子類自定義的,還是從父類繼承得到的 return 0; }
2.父子間的衝突
子類可以定義父類中的同名成員
子類中的成員將隱藏父類中的同名成員
父類中的同名成員依然存在於子類中
通過作用域分辨符(::)訪問父類中的同名成員
訪問父類中的同名成員
47-2 同名成員變數深度分析
#include<iostream> #include<string> using namespace std; class Parent { public: int mi; Parent() { cout << "Parent() :" << "&mi = " << &mi<< endl; } }; class Child : public Parent { public: int mi; Child() { cout << "Child() :" << "&mi = " << &mi << endl; } }; int main() { Child c; c.mi = 100; c.Parent::mi = 1000; cout << "&c.mi = " << &c.mi << endl; cout << "c.mi = " << c.mi << endl; cout << "&c.Parent::mi = " << &c.Parent::mi << endl; cout << "c.Parent::mi = " << c.Parent::mi << endl; return 0; } 執行結果 Parent() :&mi = 0x7ffe2a97d3f0 Child() :&mi = 0x7ffe2a97d3f4 &c.mi = 0x7ffe2a97d3f4 c.mi = 100 &c.Parent::mi = 0x7ffe2a97d3f0 c.Parent::mi = 1000
3.再論過載
類中的成員函式可以進行過載
1.過載函式的本質為多個不同的函式
2.函式名和引數列表是唯一的標識
3.函式過載必須發生在同一個作用域中
4.問題
子類中定義的函式是否能過載父類中的同名函式?
47-3 父子間的函式過載
#include <iostream> #include <string> using namespace std; class Parent { public: int mi; void add(int v) { mi += v; } void add(int a, int b) { mi += (a + b); } }; class Child : public Parent { public: int mi; void add(int v) { mi += v; } void add(int a, int b) { mi += (a + b); } void add(int x, int y, int z) { mi += (x + y + z); } }; int main() { Child c; c.mi = 100; c.Parent::mi = 1000; cout << "c.mi = " << c.mi << endl; cout << "c.Parent::mi = " << c.Parent::mi << endl; c.add(1); c.add(2,3); c.add(4,5,6); cout << "c.mi = " << c.mi << endl; cout << "c.Parent::mi = " << c.Parent::mi << endl; return 0; } 執行結果 c.mi = 100 c.Parent::mi = 1000 c.mi = 121 c.Parent::mi = 1000 可以思考下這兩種情況下的執行結果 c.mi = 100 c.Parent::mi = 1000 c.mi = 115 c.Parent::mi = 1006 c.mi = 100 c.Parent::mi = 1000 c.mi = 121 c.Parent::mi = 1000
5.父子間的衝突
子類中的函式將隱藏父類的同名函式
子類無法過載父類中的成員函式
使用作用域分辨符訪問父類中的同名函式
子類可以定義父類中完全相同的成員函式
小結
子類可以定義父類中的同名成員
子類中的成員將隱藏父類中的同名成員
子類和父類中的函式不能構成過載關係
子類可以定義父類中完全相同的成員函式
使用作用域分辨符訪問父類中的同名成員