C ++での関数のオーバーロードは、ダイヤモンド継承なしでどのように機能しますか?

Sripooja

以下の例では、

void f(double, double);  // at global scope

struct Grandparent {
    void f(int);
    void f(double, double);
};

struct Parent : public Grandparent {
    void f(int);  // hides all overloads of Grandparent::f
};

struct Child : public Parent {
    void g() { f(2.14, 3.17); }  // resolves to Parent::f
};

Parent :: fの宣言は、署名に関係なく、すべての祖先の宣言をどのようにParent::f(int)支配および非表示にしGrandparent::f(double, double)ますか。つまり、2つのメンバー関数の署名が大きく異なる場合でも、の宣言を支配および非表示にしますか?

私はhttps://en.wikipedia.org/wiki/Dominance_(C%2B%2B)を介してこの例に出くわしました

ソンユアンヤオ

隠されているのは名前だからです; 署名は含まれていません。名前検索のルールによると

名前ルックアップは、以下で説明するようにスコープを調べ、任意の種類の宣言が少なくとも1つ見つかるまで調べます。その時点でルックアップは停止し、それ以上のスコープは調べられません。

この場合、名前fがスコープ内で見つかると、Parent名前の検索が停止します。の名前Grandparentはまったく考慮されません。(BTW:名前の検索後、オーバーロード解決で署名がチェックされ、最適なものが選択されます)

期待した動作でない場合は、を介して名前を導入できますusing

struct Parent : public Grandparent {
    using Grandparent::f;
    void f(int);
};

struct Child : public Parent {
    void g() { f(2.14, 3.17); }  // refer to Grandparent::f(double, double)
};

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

複数のインターフェイスの継承はC#でどのように機能しますか?

分類Dev

テンプレートメンバー関数はC ++でどのように機能しますか?

分類Dev

機能のオーバーロードとODRはどのように共存できますか?(C ++)

分類Dev

C ++継承は、異なるパラメーターで関数をオーバーロードします

分類Dev

C ++での関数のオーバーロードが機能しない

分類Dev

C ++でメンバー関数のみを継承するにはどうすればよいですか?

分類Dev

C ++のメンバーへのポインターは内部でどのように機能しますか?

分類Dev

2つの引数の関数に対してC ++で[]演算子をオーバーロードするにはどうすればよいですか?

分類Dev

関数のテンプレート控除はC ++でどのように機能しますか?

分類Dev

Objective-C(またはC)では、ブール値へのポインターを持つこのコードはどのように機能しますか?

分類Dev

Cなどの他のシステムプログラミング言語での関数の通常の使用と比較して、Rustスタイルのメソッド呼び出しアプローチにオーバーヘッドはありますか?

分類Dev

C#ラムダは「リターン」なしでどのように機能しますか?

分類Dev

「this」へのポインタをベースコンストラクタに渡すことにより、C ++ダイヤモンド継承を排除します

分類Dev

複数のヘッダー ファイルとソース ファイルで C++ の継承が機能しないのはなぜですか?

分類Dev

このC#メソッドのオーバーロードが期待どおりに機能しないのはなぜですか?

分類Dev

関数のオーバーロードは C++ のテンプレートでは機能しませんか?

分類Dev

このような関数を使用するにはどうすればよいですか?(C ++、演算子のオーバーロード)

分類Dev

C ++:メンバー関数へのポインターを含む任意のファンクターを取得できるように、関数をオーバーロードするにはどうすればよいですか?

分類Dev

C(またはC ++)では、「&」演算子はアドレス演算子とビット演算子の両方としてどのように機能しますか?演算子のオーバーロードはCではサポートされていないため

分類Dev

このC ++コードは、異常な単一のブール式ステートメントでどのように機能しますか?

分類Dev

C ++で親関数(非表示ではない)のオーバーライドをシミュレートするにはどうすればよいですか?

分類Dev

述語および/または述語データメンバーおよび/またはメンバー関数はC ++でどのように機能しますか?次のスニペットで(elem。* predicator)()は何をしますか?

分類Dev

継承されたクラスで演算子のオーバーロードを使用して、C#の基本演算子と一致させるにはどうすればよいですか?

分類Dev

関係演算子のオーバーロードがC ++で機能しない

分類Dev

C#コンパイラは明示的なキャスト演算子のオーバーロードをどのように処理しますか?

分類Dev

openGL(ES)シェーダーとC ++ APIで属性の複数のバッファーはどのように機能しますか

分類Dev

多重継承の場合、C++ コンパイラはメンバー変数のメモリ オフセットをどのように処理しますか?

分類Dev

C ++で1つの関数のすべてのオーバーロードを「エクスポート」するにはどうすればよいですか?

分類Dev

C ++の属性継承はどのように機能しますか?

Related 関連記事

  1. 1

    複数のインターフェイスの継承はC#でどのように機能しますか?

  2. 2

    テンプレートメンバー関数はC ++でどのように機能しますか?

  3. 3

    機能のオーバーロードとODRはどのように共存できますか?(C ++)

  4. 4

    C ++継承は、異なるパラメーターで関数をオーバーロードします

  5. 5

    C ++での関数のオーバーロードが機能しない

  6. 6

    C ++でメンバー関数のみを継承するにはどうすればよいですか?

  7. 7

    C ++のメンバーへのポインターは内部でどのように機能しますか?

  8. 8

    2つの引数の関数に対してC ++で[]演算子をオーバーロードするにはどうすればよいですか?

  9. 9

    関数のテンプレート控除はC ++でどのように機能しますか?

  10. 10

    Objective-C(またはC)では、ブール値へのポインターを持つこのコードはどのように機能しますか?

  11. 11

    Cなどの他のシステムプログラミング言語での関数の通常の使用と比較して、Rustスタイルのメソッド呼び出しアプローチにオーバーヘッドはありますか?

  12. 12

    C#ラムダは「リターン」なしでどのように機能しますか?

  13. 13

    「this」へのポインタをベースコンストラクタに渡すことにより、C ++ダイヤモンド継承を排除します

  14. 14

    複数のヘッダー ファイルとソース ファイルで C++ の継承が機能しないのはなぜですか?

  15. 15

    このC#メソッドのオーバーロードが期待どおりに機能しないのはなぜですか?

  16. 16

    関数のオーバーロードは C++ のテンプレートでは機能しませんか?

  17. 17

    このような関数を使用するにはどうすればよいですか?(C ++、演算子のオーバーロード)

  18. 18

    C ++:メンバー関数へのポインターを含む任意のファンクターを取得できるように、関数をオーバーロードするにはどうすればよいですか?

  19. 19

    C(またはC ++)では、「&」演算子はアドレス演算子とビット演算子の両方としてどのように機能しますか?演算子のオーバーロードはCではサポートされていないため

  20. 20

    このC ++コードは、異常な単一のブール式ステートメントでどのように機能しますか?

  21. 21

    C ++で親関数(非表示ではない)のオーバーライドをシミュレートするにはどうすればよいですか?

  22. 22

    述語および/または述語データメンバーおよび/またはメンバー関数はC ++でどのように機能しますか?次のスニペットで(elem。* predicator)()は何をしますか?

  23. 23

    継承されたクラスで演算子のオーバーロードを使用して、C#の基本演算子と一致させるにはどうすればよいですか?

  24. 24

    関係演算子のオーバーロードがC ++で機能しない

  25. 25

    C#コンパイラは明示的なキャスト演算子のオーバーロードをどのように処理しますか?

  26. 26

    openGL(ES)シェーダーとC ++ APIで属性の複数のバッファーはどのように機能しますか

  27. 27

    多重継承の場合、C++ コンパイラはメンバー変数のメモリ オフセットをどのように処理しますか?

  28. 28

    C ++で1つの関数のすべてのオーバーロードを「エクスポート」するにはどうすればよいですか?

  29. 29

    C ++の属性継承はどのように機能しますか?

ホットタグ

アーカイブ