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

问题描述 投票:0回答:1

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

你能告诉我我错在哪里吗?

c++
1个回答
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是一种类型(如果你在所有类型/类的第一个字母上使用大写,你会注意到你使用的是类型而不是变量)。

© www.soinside.com 2019 - 2024. All rights reserved.