【发布时间】:2020-04-07 11:12:50
【问题描述】:
我遇到了如下类似的问题。
class Animal
{
void* value;
public:
Animal() {}
void* getValue() {return value;}
}
class IntAnimal : private Animal
{
public:
IntAnimal() {}
int getValue() {return (*(int*)Animal::getValue());}
}
基本上基类返回 void*,但派生类返回常规类型(int、double、char 等)。
我需要做:
我们可以:
Animal* intAnimal = new IntAnimal(); int x = intAnimal->getValue();我认为这是不可能的。阻止他人这样做:
Animal* intAnimal = new IntAnimal();
如何防止别人做 (2) ?谢谢。
编辑:是的,这是一个糟糕的设计,我应该使用模板。但是,有没有其他方法可以解决这个问题?
【问题讨论】:
-
但是.. 为什么?动物不应该是模板吗?或者...如果
value不代表任何东西,为什么它会存在于 Animal 中?为什么getValue不只是一个虚函数 = 0 并且值在 IntAnimal 中存储为 int?简而言之,你想表达什么? -
是的,Animal 应该 100% 成为模板。这是一个糟糕的设计。但是为了使事情变得不切实际,不切实际地困难,我被问题要求使用 void* 而不是模板
-
@user3192711 "asked":这是学校的作业吗?
-
不是作业,只是我读到的一个问题。显而易见的解决方案是使用模板。但是没有模板有没有办法解决这个问题?
标签: c++ inheritance stack void void-pointers