请帮助我如何使用Static或Dynamci cast调用派生类非虚函数。
我只想通过使用静态或动态强制转换来调用派生调用函数“ 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);
^
您能告诉我我在哪里弄错了吗。
答案 0 :(得分:4)
记住dynamic_cast< Type* >(ptr)
更改
derive* dptr = dynamic_cast<derive*>(base);
到
derive* dptr = dynamic_cast<derive*>(bptr);
哪个作为结果:
I am derive
I am derived test
因为base
是一种类型(如果您对所有类型/类的第一个字母都使用大写字母,则会注意到您使用的是类型而不是变量)。