【c++】11.重写、覆盖、using、typedef
生活随笔
收集整理的這篇文章主要介紹了
【c++】11.重写、覆盖、using、typedef
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
重寫、覆蓋、using、typedef
注意,重寫和覆蓋并不是一個意思。
重寫:
重寫是虛函數在子類中重新定義,使用override,override也可以不寫,加上override是規范,語義更清晰明白它是重寫虛函數。
覆蓋:
覆蓋 是 子類定義 同名函數 覆蓋 掉父類同名函數。
父類如果定義某非虛函數func1(int,int),子類定義了函數func1(double),那么子類不能再調用func1(2,3),因為子類只要定義了父類同名函數,不管他們參數類型和個數是否不同,都會隱藏父類的同名函數,相當于覆蓋了父類的所有同名函數。
如果子類既要定義一個同名函數,又想使用父類的這個同名函數,c++11可以通過在子類中使用using 父類名::func1;即可。
同理,如果父類有幾個復雜的構造函數,子類想繼承父類所有構造函數,c++11可以在子類中使用 using 父類名::父類名;如:
class Base{public:Base();Base(const Base &){// 很復雜的一些初始化語句};func1(int,int); };class Child : Base{public:using Base::Base; //加上這句話,子類就繼承了父類的所有構造函數using Base::func1(); // 加上這句話,就可以使用基類被覆蓋(隱藏)的所有同名函數func1了。func1(); //該定義會直接覆蓋掉基類所有同名函數func1. 解決辦法就是使用上面的using Base::func1(); };using 的用法:
using namespace std; using namespaceA::namespaceB::func; // 調用命名空間B下的func()函數,該聲明語句不要寫成func(),不能加括號。using anotherName = int; //取別名。一般用在某類型特別長的時候,取個短點的別名。注意區分typedef,typedef和using在取別名上作用基本一樣,只是順序不同,如:typedef int anotherName;
struct 和 class的作用基本一樣,但是常規用法是,struct訪問類型默認是public,并且一般用在把一些變量封裝成一個結構體變量。class就是通常的用法。
總結
以上是生活随笔為你收集整理的【c++】11.重写、覆盖、using、typedef的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【c++】10. memset()、【s
- 下一篇: 【c++】5.函数传指针与传值特容易混淆