基本クラスに2つのバージョンoperator->
(constでオーバーロード)があるとします。私が言うなら
using Base::operator->;
派生クラスでは、両方のバージョンにアクセスできますか、それとも非定数バージョンにアクセスできますか?
基本クラスに2つのバージョンoperator->
(constでオーバーロード)があるとします。私が言うなら
using Base::operator->;
派生クラスでは、両方のバージョンにアクセスできますか、それとも非定数バージョンにアクセスできますか?
名前を隠すのと同じビジネス。それはすべてか無かです。宣言(7.3.3)を使用すると、メンバーではなく名前が表示されます。
ISO / IEC 14882(2003)、7.3.3。1 / using-declarationは、using-declarationが表示される宣言型領域に名前を導入します。その名前は、他の場所で宣言されているエンティティの名前の同義語です。
7.3.3を読むことをお勧めします。中には微妙なことがあります。使用することはできません-テンプレートを宣言します。使用する名前で参照されるすべてのメンバーにアクセスできる必要があります。名前は、使用する宣言が見つかったブロック内の名前と一緒にオーバーロード解決の対象と見なされます(つまり、何も非表示になりません)。 )などなど。
その親で同じ名前のメソッド/演算子のすべてのバージョンにアクセスできます。
両方とも。やってみましたか?(この答えは短いです:ああ、ここに例があります:
#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();
}