【发布时间】:2018-04-30 09:23:51
【问题描述】:
我一直试图找到这个问题的答案,但我找不到(我什至不知道如何正确地表述这个问题)所以我决定在 StackOverflow = 上写我的第一篇文章。
上下文如下:
我有这个父类:
class Parent
{
public:
Parent(){};
void foo(void)
{
//Do some common things
bar();
//Do some more common things
};
protected:
virtual void bar(void) = 0;
};
我想创建无限数量的派生子:
class Child1 : public Parent
{
public:
Child1() : Parent(), child1Variable(0) {};
protected:
virtual void bar(void) = 0;
private:
uint32_t child1Variable;
};
class Child2 : public Parent
{
public:
Child2() : Parent(), child2Variable(0) {};
protected:
virtual void bar(void) = 0;
private:
uint32_t child2Variable;
};
.
.
.
class ChildN : public Parent
{
public:
ChildN() : Parent(), childNVariable(0) {};
protected:
virtual void bar(void) = 0;
private:
uint32_t childNVariable;
};
原因主要是没有重复Parent的foo()中的代码
然后我想创建我的最终实例化类,例如:
class ExampleFinal : public Child1, public Child3, public Child27
{
//How to define Child1::bar(), Child3::bar() and Child27::bar() ??
private:
void bar(void); //????
};
所以问题是:
- 如何定义(滥用符号)
ExampleFinal::Child1::bar、ExampleFinal::Child3::bar、...的方法 - 我是否如此坚持这一点而忽略了一个更简单的解决方案?
最终目标是能够做到以下几点:
ExampleFinal test;
test.Child1::foo(); //should end up on "ExampleFinal::Child1::bar"
test.Child3::foo(); //should end up on "ExampleFinal::Child3::bar"
谢谢!
【问题讨论】:
-
你知道你不需要在派生类中重复
virtual void bar(void) = 0;吗? -
如果您需要无限数量的子实例,那么您不需要无限数量的子类定义,只需一个。
-
为什么需要不同的
Child类?你不能只有Children 的向量吗? -
那么......每个孩子真的需要他们自己的成员覆盖吗?我的意思是,无论如何,您似乎只关心最派生的类。
-
我很确定这将是继承滥用;我无法接受
ExampleFinal“是”Child1和Child2和 ....
标签: c++