好的,所以我遇到了一些非常奇怪的问题,即在类中存储一个基类指针数组,然后设置这个基类指针等于一些动态分配的派生类指针。 我的代码太长了,并且在这里发布了GUI调用,因此我会在这里制作一些模拟代码来演示我正在使用的方法
基类 - 基础
class Base
{
public:
Base(){ // do nothing}
virtual void SetUI(){ // do nothing}
}
派生类 - 派生
class Derived : public Base
{
public:
Derived() : Base() { // do nothing}
virtual void SetUI(){// do nothing}
}
这是一个基本上保存我的程序数据的类,它包含一个指向基类的指针数组。这些指针通过指向动态创建的派生类类型的对象来初始化。
class HelperClass
{
private:
Base * basearray[2];
public:
HelperClass()
{
basearray[0] = new Derived;
basearray[1] = new Derived;
}
Base * getBaseArray(int key)
{
return this->basearray[key];
}
}
这是我的“主要”,这是一切开始变得怪异的地方。
int main()
{
HelperClass hold;
hold.getBaseArray(0)->setUI();
// NOTHING HAPPENS ABOVE, THE CODE DOESN'T EVEN REACH THIS POINT, IT JUST GET'S LOST SOMEWHERE IN //THE ABOVE STATEMENT. i KNOW THIS BECAUSE I PUT AN exit(0) inside the function setUI() for both the //base and derived class and the program doesn't exit.
// this also does nothing
if(hold->getBaseArray(0) || !hold->getBaseArray(0))
exit(0);
return 0;
}
但奇怪的是,如果我执行类似下面的操作,我只是声明一个基类指针并让它指向派生类的动态创建对象,一切正常。
int main()
{
Base *hold;
hold = new Derived;
hold->setUI(); // <- this works polymorphically
return 0;
}
当我尝试使用HelperClass中的基类指针数组时,有没有人知道为什么我的程序停止工作?当我尝试执行getBaseArray(int)时,它不会返回任何内容,这会导致类似
的语句if(hold->getBaseArray(0) || !hold->getBaseArray(0)) {exit(0);}
不让程序退出,这很奇怪,因为getBaseArray()返回的指针是null或非null,这意味着程序应该退出,无论什么