moa*_*oai 3 c++ polymorphism containers
好吧,作为一名程序员,我很缺乏经验,更不用说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);
}
Run Code Online (Sandbox Code Playgroud)
(我不确定那是对的,我仍然对指针感到不稳定.我希望至少可以解决这个问题.)
所以,我不完全确定我是否可以这样做.我有一个潜在的怀疑,答案是否定的,但我想确定.如果有人有另一种方法来完成这种事情,我会很高兴听到它.
绝对有可能.只需对代码进行一些小的更改就可以实现这一点.您需要更改基类(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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2611 次 |
| 最近记录: |