你能帮助我如何使用Static或Dynamci强制转换来调用派生类非虚函数。
我想通过仅使用静态或动态强制转换来调用派生调用函数“test”。
#include<iostream>
using namespace std;
class base
{
public:
virtual void call()
{
cout<<"I am base"<<endl;
}
/*void test()
{
cout<<"I am test"<<endl;
}*/
};
class derive:public base
{
public:
void call()
{
cout<<"I am derive"<<endl;
}
void test()
{
cout<<"I am derived test"<<endl;
}
};
int main()
{
derive d;
base *bptr = &d;
bptr->call();
derive* dptr = dynamic_cast<derive *>(base);
dptr->test();
return 0;
}
在编译时,我得到以下错误:
main.cpp: In function 'int main()':
main.cpp:34:47: error: expected primary-expression before ')' token
derive* dptr = dynamic_cast<derive *>(base);
^
你能告诉我我错在哪里吗?
记住dynamic_cast< Type* >(ptr)
更改
derive* dptr = dynamic_cast<derive*>(base);
至
derive* dptr = dynamic_cast<derive*>(bptr);
结果如下:
I am derive
I am derived test
因为base
是一种类型(如果你在所有类型/类的第一个字母上使用大写,你会注意到你使用的是类型而不是变量)。