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 サイトの他の関連記事を参照してください。