如何为以下程序使用静态或动态强制转换

时间:2018-07-31 07:43:26

标签: c++

请帮助我如何使用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);
                                               ^ 

您能告诉我我在哪里弄错了吗。

1 个答案:

答案 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是一种类型(如果您对所有类型/类的第一个字母都使用大写字母,则会注意到您使用的是类型而不是变量)。