using用法是:1、命名空間【using namespace 命名空間】;2、型別別名【using aa=double】;3、改變從基類繼承來的成員的存取等級;4、讓派生類別對基底類別中所有的重載函數都可見;5、讓衍生類別繼承所有建構子。
【相關學習推薦:#C語言教學影片##】
using用法是:
1、命名空間
using namespace 命名空间;//这样每次使用命名空间中的变量时就不用指定命名空间了注意:頭檔中不應有using命名空間的宣告
2、型別別名(C 11)
using aa = double;//等价于typedef double aa typedef double db, *p;//db是double的同义词,p是double*的同义词(注意)
3、改變從基底類別繼承來的成員的存取等級
class base { public: int fun(int x); int b; }; class son : private base { public: using base::fun; //fun(int x)由private变成public(注意:using不指定参数列表) protected: using base::b; //b由public变成protected };
4、讓衍生類別對基底類別中所有的重載函數都可見,而不是隱藏
class base { public: void func() { cout << "func1()" << endl; } void func(int x) { cout << "func2()" << endl; } }; class son : public base { public: using base::func; //若没有此句,func()和func(int x)将会被隐藏 void func(int x, int y) { cout << "func()3" << endl; } };
5、第4點的升級,using可讓衍生類別繼承直接基底類別所有的建構子
1)衍生類別並非以常規方式繼承基底類別的建構函數,而是要使用using宣告讓衍生類別繼承基底類別的所有的(有兩個例外)建構子2)例外一:衍生類別自己的建構子與基底類別的某個建構子有相同的形參,則該建構子不會被繼承 例外二:預設、拷貝和移動建構函數不會被繼承3)與第3點不同,using宣告不會改變繼承的建構函數的存取等級:不管using聲明出現在哪,基底類別的共有/受保護/私有建構子在衍生類別中還是一個共有/受保護/私有建構函數,4)using宣告不能指定explicit和constexpr:如果基底類別的建構子是explicit或constexpr,則繼承的建構子也擁有相同的屬性5)繼承的建構子不算是自訂的建構函數,所以仍然可以滿足合成建構子的生成規則6)如果基底類別的建構子有預設實參,則實預設參不會被繼承7)如果基底類別的建構子有兩個形參,一個形參沒有預設實參,另一個形參有預設實參,則透過繼承會得到兩個構造函數:一個構造函數有兩個形參,另一個只有一個形參(對應沒有預設實參的那個),總之,預設實參都不會被繼承
class base { public: base() {} base(string s, int a) {} }; class son : public base { public: using base::base;//继承直接基类所有的构造函数,对于基类的每个构造函数,编译器都在派生类中生成一个形参完全相同的构造函数 //using不能指定explicit和constexpr private: //使用继承来的构造函数时,如果派生类有自己的数据成员,则这些成员将被默认初始化 string str; int num; }; //等价于: class son : public base { public: son():base() {} son(string s, int a): base(s, a) {} };
以上是using用法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!