2013-06-19 3 views
0

Я пытаюсь использовать метод от дочернего класса, который наследует от интерфейса. Вызов этого метода выполняется из класса клиента (основной метод). // интерфейс методC++ с использованием методов дочернего класса класса, который наследует интерфейс

class InterfaceMethod{ 
    virtual void method(void) = 0; 
} 

Это класс, который является наследование интерфейса:

class ChildClass: public InterfaceMethod 
{ 
    public: 
    ChildClass(){} 
    ~ ChildClass(){} 
    //virtual method implementation 
    void method(void) 
{ 
//do stuff 
} 
//and this is the method that i want to use! 
//a method declared in the child class 
void anotherMethod() 
{ 
    //Do another stuff 
} 
private: 

} 

Это клиент:

int main() 
{ 
    InterfaceMethod * aClient= new ChildClass; 
    //tryng to access the child method 

    (ChildClass)(*aClient).anotherMethod();//This is nor allowed by the compiler!!! 
} 
+0

Возможно, это плохая идея - если вы хотите иметь возможность вызвать метод через интерфейс, вы должны добавить его в интерфейс. – doctorlove

ответ

4

Вы хотите динамический оттенок.

ChildClass * child = dynamic_cast<ChildClass*>(aClient); 
if(child){ //cast sucess 
    child->anotherMethod(); 
}else{ 
    //cast failed, wrong type 
} 
0

Попробуйте так:

static_cast<ChildClass*>(aClient)->anotherMethod(); 

Вы не должны делать это, если вы не можете быть уверены, что у вас есть экземпляр производного класса.

+0

Выполнение этого способа user814628 рекомендуется, если у вас есть RTTI. – TractorPulledPork

Смежные вопросы