2016-04-28 5 views
-5

私は言葉で私の質問を表現することはできません。以下のコードを見て、あなたが私の質問を理解することを願っています。インターフェイスポインタC++

私は以下のようにクラスとインターフェイスを持っています。

class MyInterface 
{ 
public: 
    virtual ~MyInterface(){} 
    virtual void print() = 0; 
}; 

class MyClass : public MyInterface 
{ 
public: 
    MyClass(){} 
    ~MyClass(){} 
    void print() 
    { 
     printf("Hello World\n"); 
    } 
}; 

ここに私の質問があります。

MyClass* myclass = new MyClass(); 
myclass->print(); //will print "Hello World" 
MyInterface* pMyInterface = (MyInterface*)myclass; 
pMyInterface->print(); 

Hello Worldも同様ですか?はいの場合は、なぜですか?

+6

試しましたか?何か問題があったのですか? – songyuanyao

+0

いいえ、まだありません。私はプロジェクトを続けています。 – ceptonite

+3

試してみるとかなり速いもののようですね... – Joe

答えて

0

MyInterface* pMyInterface = (MyInterface*)myclass;のように、アクセス可能な基本クラスに明示的にキャストする必要はありません。これは、ポインタ/参照から派生クラスへの暗黙的な変換で、アクセス可能な基本クラスの変換になります。

実際、このようなキャストは、クラスが無関係であるとバグを招く可能性があります。

詳細はvirtual function specifierをご覧ください。

+0

@ceptonite 'virtual'関数についての記事を読むことをお勧めします。かなり基本的なことですが、多くの教科書や参考文献によく記載されているため、インクを浪費することはありません。 –

関連する問題