【发布时间】:2019-11-13 09:17:03
【问题描述】:
如何强制派生类具有特定派生类型的成员数据。
即,
class Project {
public:
int projdata;
};
class Article: public Project {
};
class Building: public Project {
};
class Emplooyee {
public:
std::vector<Project> projs;
}
class Architect: public Employee {
};
class Writer: public Employee {
};
我现在如何强制 Architect 对象只有 Building 类型的项目,而 Novelist 只有 Article 类型的项目?即,我想要类似的东西
class Architect: public Employee {
public:
std::vector<Building> projs;
};
和
class Novelist: public Employee {
public:
std::vector<Article> projs;
};
我还可以存储指向项目的指针,然后将它们存储为正确的类型。是否有一种技术或设计模式可以对派生类的成员强制执行此类相应的继承规则?
【问题讨论】:
-
您可以将 Employee 设为模板,并将项目子类型作为类型参数。或者保留 Employee 并有一个中间 EmployeeImpl 模板来自动进行转换。
-
这是 OOP 中的大规模反模式。你为什么关心类存储什么data?具体来说,你想做什么,为什么不能是成员函数而不是成员变量?
标签: c++ oop inheritance design-patterns