ホームページ  >  記事  >  バックエンド開発  >  を使用するとどのような用途がありますか

を使用するとどのような用途がありますか

coldplay.xixi
coldplay.xixiオリジナル
2020-10-26 11:06:198754ブラウズ

using 使用法は次のとおりです: 1. 名前空間 [名前空間ネームスペースを使用]; 2. タイプ エイリアス [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 のアップグレード (allows を使用)派生クラスは、直接の基本クラスのすべてのコンストラクターを継承します。

1) 派生クラスは、従来の方法では基本クラスのコンストラクターを継承しませんが、using ステートメントを使用して派生クラスのコンストラクターを継承します。クラスは基本クラスを継承します すべて (2 つの例外を除く) コンストラクター

2) 例外 1: 派生クラス独自のコンストラクターが基本クラスのコンストラクターと同じ仮パラメーターを持つ場合、コンストラクターは継承されません

例外 2: デフォルト、コピーおよび移動コンストラクターは継承されません

3) ポイント 3 とは異なり、using ステートメントは継承されたコンストラクターのアクセス レベルを変更しません。と表示されても、基底クラスの public/protected/private コンストラクターは、派生クラスの public/protected/private コンストラクターのままです。

4) using ステートメントでは、明示的および constexpr: を指定できません。コンストラクターが明示的または constexpr の場合、継承されたコンストラクターも同じ属性を持ちます。

5) 継承されたコンストラクターはカスタム コンストラクターではないため、合成コンストラクターの生成規則を満たすことができます

6)基本クラスのコンストラクターにデフォルト引数がある場合、実際のデフォルト パラメーターは継承されません。

7) 基本クラスのコンストラクターに 2 つの仮パラメーターがある場合、1 つの仮パラメーターにはデフォルトの引数パラメーターがありません。もう一方の仮パラメータにデフォルトの実パラメータがある場合、継承によって 2 つのコンストラクタが取得されます: 1 つのコンストラクタには 2 つの仮パラメータがあり、もう 1 つは 1 つの仮パラメータ (デフォルトの実パラメータを持たないものに対応) だけがあります。実際のパラメータ どのパラメータも継承されません

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) {}
};

以上がを使用するとどのような用途がありますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。