首頁  >  文章  >  後端開發  >  using用法是什麼

using用法是什麼

coldplay.xixi
coldplay.xixi原創
2020-10-26 11:06:198804瀏覽

using用法是:1、命名空間【using namespace 命名空間】;2、型別別名【using aa=double】;3、改變從基類繼承來的成員的存取等級;4、讓派生類別對基底類別中所有的重載函數都可見;5、讓衍生類別繼承所有建構子。

using用法是什麼

【相關學習推薦:#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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn