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