好吧,作为一名程序员,我还很缺乏经验,更不用说 C++ 了,所以请多多包涵。我想做的是让一个容器类持有一个父类指针,然后使用多态性来存储一个子类对象。问题是我想通过父类指针调用子类的函数之一。这是我在代码中的意思的一种示例:
class SuperClass
{
public:
int x;
}
class SubClass : public SuperClass
{
public:
void function1()
{
x += 1;
}
}
class Container
{
public:
SuperClass * alpha;
Container(SuperClass& beta)
{
alpha = beta;
}
}
int main()
{
Container cont = new Container(new SubClass);
}
(我不确定那是对的,我仍然对指针非常不可靠。我希望它至少能说明问题。)
所以,我不完全确定我是否能做到这一点。我暗暗怀疑答案是否定的,但我想确定一下。如果有人有其他方法来完成这类事情,我会很高兴听到。
最佳答案
绝对有可能。只需对您的代码进行一些小的更改就可以使它正常工作。 您需要将基类 (SuperClass) 更改为具有与派生类 (SubClass) 具有相同“签名”的虚方法。您还需要更改 Container 构造函数以获取指向 SuperClass 的指针而不是引用。我相信这就是让它发挥作用所必需的一切。
编辑:尝试在评论中包含建议。好点。希望我没有把事情搞得太糟!
class SuperClass
{
public:
int x;
// virtual destructor ensures that the destructors of derived classes are also
// invoked
virtual ~SuperClass() { }
// abstract virtual method to be overriden by derived classes
virtual void function1() = 0;
}
class SubClass : public SuperClass
{
public:
~SubClass()
{
}
void function1()
{
x += 1;
}
}
class Container
{
public:
SuperClass * alpha;
Container(SuperClass* beta)
{
alpha = beta;
}
~Container()
{
// Note, this will invoke the destructor of the SubClass class because
// SuperClass's destructor is marked as virtual.
delete alpha;
}
}
int main()
{
Container* cont = new Container(new SubClass());
delete cont;
}
关于C++多态、函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2502107/