如何让我的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;
}
};
然而当我这样做的时候;它给了我一个错误“Expression必须有类类型。”
cBase *pBase = 0;
if (1 < 2)
{
pBase = new cDerived;
pBase.printMe();
}
答案 0 :(得分:1)
像这样修复
#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;
}
}
要修复的步骤。
在声明main
和cBase
类之后移动cDerived
函数或在main
之前向前声明这些类。
将pBase.printMe()
更改为pBase->printMe()
。由于pBase
是一个指针,因此在访问其成员之前必须取消引用它。 pBase->printMe()
就像(*pBase).printMe()
另外还有其他一些内务管理。删除pBase
对象,因为要使用指向基类(cDerived
)的指针删除派生类(cBase
),必须声明基类析构函数为virtual,或者{{当你真的希望在这里调用cBase
析构函数时,删除pBase
时将调用析构函数。
答案 1 :(得分:0)
在C ++中,为了到达指向类/结构的指针的方法/字段,你必须使用 - &gt;操作