【发布时间】:2021-05-09 15:45:25
【问题描述】:
是否可以作为父类从抽象类的指针访问子类的函数成员? 这是抽象类
class Item {
public:
virtual double getTotalPrice() = 0;
};
这是子类
class Product : public Item {
protected:
string name;
public:
Product() {}
string getName() {}
double getTotalPrice() {}
};
是否可以在主驱动程序中从 Item 类的实例访问此 getName() 函数,因为我还想显示总价和产品名称?
【问题讨论】:
-
@churill 因为这只是层次结构的粗略草图,并且名称必须作为此 Product 类的参数,因为 Product 还有其他参数。
-
如果您无法在各种
Item上做某事,那么您需要重新考虑尝试在其中一些上做某事的设计。请考虑我们是否会关注meta.stackexchange.com/questions/66377/what-is-the-xy-problem 继续详细说明设计比开始解决由设计差距引起的问题要好得多。 -
@Yunnosch 我完全同意你关于重新设计的看法。但不幸的是,我不能在这个例子中。所以原来的代码只是 Product 类,它有名称、描述等这些参数,现在我需要添加一个抽象类作为父类,并且我不允许更改原始代码。
-
好吧,你不能改变的类有 UB,因为应该返回一些东西的成员函数没有。
-
但是只需要在
Item内部进行更改(您可以更改),而不是在Product内部(您不能更改)。无论细节如何(包括您已经评论过的细节),请通过editing 将它们添加到问题中。他们很有帮助。
标签: c++ inheritance abstract-class