4

operator->(constに多重定義されている)の2つのバージョンが基本クラスにあるとします。私が言う場合宣言とconstのオーバーロードを使用

派生クラスでは、両方のバージョンまたは非constのものにアクセスできますか?

答えて

4
名の隠蔽など

同じビジネスイッツオールオアナッシングの宣言を使用して(7.3.3)名前、ないメンバーをもたらします。

ISO/IEC 14882(2003)、7.3.3。1/using宣言を使用して、宣言が現れる宣言 領域に名前を導入する。その名前は、名前の同義語 あります他の場所で宣言されているエンティティの一部。

7.3.3を読むことをお勧めします。内部に微妙なものがあります。使用することはできません - テンプレートを宣言し、使用している名前で参照されるすべてのメンバーがアクセス可能でなければなりません。使用宣言が見つかったブロックの名前の横に名前が重複しています(つまり、 )など。

3

その親に同じ名前のメソッド/演算子のすべてのバージョンにアクセスできます。

2

両方。それを試しましたか? (いまいましいこの答えは短いです。ああも、ここでの例です:。

#include <iostream> 
#include <string> 

struct bar 
{ 
    void foo() { std::cout << "non_c:foo()" << std::endl; } 
    void foo() const { std::cout << "c:foo()" << std::endl; } 
}; 

class base 
{ 
public: 
    bar* operator->() { return &b; } 
    bar const* operator->() const { return &b; } 

private: 
    bar b; 
}; 

class derived : public base 
{ 
public: 
    using base::operator->; 
}; 


int main(void) 
{ 
    const derived d = derived(); 
    derived e; 

    d->foo(); 
    e->foo(); 
} 
+3

私は特定のコンパイラで何かを試して、言語の意味を学ぶことを拒否します。 – fredoverflow

+0

@Fred、真実だが純粋な好奇心?それ以外の理由だけでは、標準を読んでみませんか? – Nim

+2

@ニム:あなたが何かを知りたいと思うたびに、標準全体を読むことは、すべてを覚えているように、少し実用的ではありません。 –

関連する問題