2016-03-23 7 views
1

のは、次のコードを考えてみましょう:基本クラスメソッドの別名

#include <iostream> 

class Base 
{ 
public: 
    void foo() //Here we have some method called foo. 
    { 
     std::cout << "Base::foo()\n"; 
    } 
}; 

class Derived : public Base 
{ 
public: 
    void foo() //Here we override the Base::foo() with Derived::foo() 
    { 
     std::cout << "Derived::foo()\n"; 
    } 
}; 

int main() 
{ 
    Base *base1 = new Base; 
    Derived *der1 = new Derived; 
    base1->foo(); //Prints "Base::foo()" 
    der1->foo(); //Prints "Derived::foo()" 
} 

私は上記のクラスを持っている場合、私は私が必要なもの::foo()に応じて、BaseまたはDerivedクラスのインスタンスのいずれかからfooメソッドを呼び出すことができます。しかし、何らかの問題があります:Derivedクラスインスタンスが必要な場合はどうしますか?このインスタンスからBase::foo()メソッドを呼び出す必要がありますか?

この問題を解決するには、次のことがあります 私は

public: 
void fooBase() 
{ 
    Base::foo(); 
} 

を派生クラスに次のメソッドを貼り付け、私は、派生クラスのインスタンスからBase::foo()方法を必要とするときDerived::fooBase()を呼び出します。

は、私はこのようなものでusingディレクティブを使用してこれを行うことができている質問:

using Base::foo=fooBase; //I know this would not compile. 

答えて

2
der1->Base::foo(); //Prints "Base::foo()" 

あなたは機能バージョンを指定し、デフォルトの解像度を使用したくない場合に便利ですあいまいさを解決するためにスコープ解決を使用して、基本クラスのメソッドを呼び出すことができます。

同様の(正確に同じではありません場合)の例はcppreference

struct B { virtual void foo(); }; 
struct D : B { void foo() override; }; 
int main() 
{ 
    D x; 
    B& b = x; 
    b.foo(); // calls D::foo (virtual dispatch) 
    b.B::foo(); // calls B::foo (static dispatch) 
} 
@言及されています
関連する問題