这是我关于stackoverflow的第一篇文章,所以请保持温和:)
我有标准的钻石问题,但我设法将其整理出来。
class Control
{
public:
bool Focused;
};
class Caption : public virtual Control
{
public:
string Text;
};
class Frame : public virtual Control { };
class Textbox : public Caption, public Frame, public TextEditor { };
遗憾的是,继承存在另一个问题。类TextEditor
具有公共变量名称:
class TextEditor
{
public:
bool Focused;
string Text;
};
编译器给我错误:
模糊访问'文字'
模糊地访问'聚焦'
但我想要的是所有类中的变量将在派生类' Textbox'中合并。
感谢您提供任何帮助 对不起任何语言错误和/或我问的问题。
更新
一点解释因为我可能会使用错误的单词。对不起。
通过'合并'我的意思是:
Control
,Caption
或Frame
的变量或方法,则会影响TextEditor
的值,反之亦然。换句话说,变量在派生类中共享。所以我的最后一堂课将会是这样的:
class Textbox : public Caption, public Frame, public TextEditor
{
public:
string Text;
bool Focused;
};
而不是这样:
class Textbox : public Caption, public Frame, public TextEditor
{
public:
string Caption::Text;
bool Caption::Focused;
string TextEditor::Text;
bool TextEditor::Focused;
};
现在发生了什么。因为我不能这样做:
Textbox A;
A.Text = "Text";
因为我有两个名为Text
的变量。所以我必须这样做:
Textbox A;
A.Caption::Text = "Text";
A.TextEditor::Text = "Text";
祝你好运 Lavi的
答案 0 :(得分:0)
注意:
数目:
class TextEditor
也不会继承class Control
和class Caption
?这似乎是一个显而易见的解决方案 - 你仍然必须使用class TextBox
的虚拟继承。如果1不是一个选项 - 那就是这个 - 但是在这个有限的样本中,HasText和Focusable分别与Caption和Control相比似乎毫无意义。
class HasText
{
public:
virtual string& text() { return text; }
virtual const string& text() const { return text; }
private:
text
};
class Focusable
{
public:
virtual bool& focused() { return focused; }
virtual const bool& focussed() const { return focussed; }
};
class Control : public virtual Focusable { };
class Caption : public virtual Control, public virtual HasText { };
class Frame : public virtual Control { };
class TextEditor : public virtual HasText, public virtual Focusable { };
class Textbox : public virtual Caption, public virtual Frame, public virtual TextEditor { };