I`ve面臨着一個非常有趣的問題,我希望你能幫助我什麼,我做錯了..C++調用函數導致調用另一個函數
class abstract1
{
public:
virtual ~ abstract1(){};
virtual void funk1()=0;
virtual void punk1()=0;
};
class abstract2
{
public:
virtual ~ abstract2(){};
virtual void funk2()=0;
virtual void punk2()=0;
};
class Derived: public abstract1,
public abstract2
{
public:
Derived(){ cout<<"Derived constructor"<<endl;};
~Derived() {cout <<"Derived destructor" <<endl;};
void funk1(){
cout<<"funk1 function in Derived!!!"<<endl;
};
void punk1(){
cout<<"punk1 in Derived!!!"<<endl;
};
void funk2(){
cout<<"funk2 function in Derived!!!"<<endl;
};
void punk2(){
cout<<"punk2 in Derived!!!"<<endl;
};
};
class myapi{
public:
void start(void *_drved){
drved=(abstract2*)_drved;
};
void callback(){
drved->funk2();
drved->punk2();
}
protected:
abstract2* drs;
};
在這裏,我定義了兩個基類和從這兩個繼承的派生類。 main()的實現如下:
int main() {
Derived* myderived =new Derived();
myapi* dbmodule= new myapi();
dbmodule->start(myderived);
dbmodule->callback();
return 0
}
我期望看到funk2和punk2越來越稱爲此起彼伏。然而結果對我來說是新的。 Callback()似乎稱爲funk1和punk1。屏幕輸出是象下面這樣:
Derived constructor
funk1 function in Derived!!!
punk1 in Derived!!!
希望你可以讓我知道我得到錯誤here.Thanks
對void指針使用'(abstract2 *)'結束於'reinterpret_cast'而不是'dynamic_cast'。 – user1810087
比較'std :: cout << reinterpret_cast(myderived)'和'std :: cout << static_cast (myderived)' –
molbdnilo
不要使用'void *'use'Derived *'或者,因爲你最終使用指向'abstract2'的指針,從一個指向該指針的指針開始,這將允許您使用任何派生自該類的類,而不會產生void *類型的不安全。 [將void *替換爲Derived *會產生您期望的行爲](http://coliru.stacked-crooked.com/a/a98279daeb5c57ef) – jaggedSpire