【发布时间】:2017-03-27 03:45:27
【问题描述】:
我不知道如何为派生派生类的构造函数实现初始化列表。请参阅基础抽象类:
public:
Shape(char *Type = "Unknown")
{
this->Type = Type;
}
string getType() {return Type;}
当然还有一个派生的Rectangle类,很容易实现:
public:
Rectangle(double Side1, double Side2) : Shape("Rectangle")
{
this->Side1 = Side1;
this->Side2 = Side2;
}
然后我想导出 Square 和 Rectangle 作为一个特例,但是对于我的生活,我无法弄清楚如何在下一个导出 @987654327 中包含假定的初始化列表 Shape("Square") @类:
public:
Square(double Size) : Rectangle(Size, Size) { }
我不能再次使用冒号运算符,可以吗?任何帮助,非常感谢。 我的最终目标是在 cpp 上查询两个派生类的类型,我将其实例化如下:
Shape *rectangle = new Rectangle(dSide1, dSide2);
Shape *square = new Square(dSide1);
并因此检索:
cout << setw(t) << shape[i]->getType().data() ;
【问题讨论】:
-
只要去掉
Type成员(无论如何存储char*是个坏主意)并将getType定义为虚函数:virtual string getType() { return "Unknown"; }- 并对所有类重复此操作 -
@Martin。不,我做不到:Square(double Size):Rectangle(Size, Size):Shape("Square){}...
-
@Ap31,+1 我刚刚尝试了您推荐的修改,当然它就像一个魅力,非常感谢。 char 指针实现是我们教授的想法,所以我不确定当他看到我更改了他的代码时它会如何下降:)
-
如果这是您的教授告诉您的,那么您可能仅限于常规功能(我敢打赌虚拟继承也是不可能的)-在这种情况下,它看起来就像他可能正在为您准备引入虚拟功能:)
标签: c++