gpt4 book ai didi

c++ - 使用基指针来使用派生对象函数

转载 作者:行者123 更新时间:2023-11-30 05:47:18 26 4
gpt4 key购买 nike

如何让我的 Base 指针实例化一个派生对象并使用它的函数?有没有办法像java一样进行类型转换?考虑这个示例代码:

int main(){
cBase *pBase = 0;
if (1 < 2)
{
pBase = new cDerived;
}
}

class cBase
{public:
virtual void printMe()
{
std::cout << "printed cBase" << endl;
}
};

class cDerived: public cBase
{public:
virtual void printMe()
{
std:: cout << "printed cDerived" << endl;
}
};

但是当我这样做时;它给我一个错误“表达式必须有类类型”。

cBase *pBase = 0;
if (1 < 2)
{
pBase = new cDerived;
pBase.printMe();
}

最佳答案

这样修复

#include <iostream>
using namespace std;

class cBase
{
public:
virtual ~cBase() {};
virtual void printMe()
{
std::cout << "printed cBase" << endl;
}
};

class cDerived: public cBase
{public:
virtual void printMe()
{
std:: cout << "printed cDerived" << endl;
}
};

int main(){
cBase *pBase = 0;
if (1 < 2)
{
pBase = new cDerived;
pBase->printMe();
delete pBase;
}
}

修复步骤。

  1. cBasecDerived 类声明之后移动 main 函数,或者在 main 之前声明这些类>.

  2. pBase.printMe() 更改为 pBase->printMe()。由于 pBase 是一个指针,您必须在访问其成员之前取消引用它。 pBase->printMe() 就像是 (*pBase).printMe()

  3. 的简写

加上一些其他的内务处理。删除 pBase 对象,因为您要使用指向基类 (cBase) 的指针删除派生类 (cDerived),所以您必须声明基类析构函数 virtual 或 cBase 析构函数将在 pBase 被删除时调用,而您确实希望在此处调用 cDerived 析构函数。

关于c++ - 使用基指针来使用派生对象函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28619087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com