最近遇到了以下问题。我有一个基类,它有一个 Base_encapsulated_class。
class Base_class
{
public:
Base_class(int int_value, short short_value) :
m_encapsulated_class(int_value, short_value)
{};
~Base_class(void){};
Base_encapsulated_class m_encapsulated_class;
};
class Base_encapsulated_class
{
public:
Base_encapsulated_class(int int_value, short short_value)
: m_int(int_value),
m_short(short_value)
{};
~Base_encapsulated_class(void){};
private:
int m_int;
short m_short;
};
现在我想扩展 Base_class
和 Base_encapsulated_class
来实现:
class Derived_class : public Base_class
{
public:
Derived_class(int int_value, short short_value, bool boolean_value) :
Base_class(int_value, short_value)
{};
~Derived_class(void)
{};
Derived_encapsulated_class m_encapsulated_class;
};
class Derived_encapsulated_class : public Base_encapsulated_class
{
public:
Derived_encapsulated_class(int int_value, short short_value, bool boolean_value) :
Base_encapsulated_class(int_value, short_value),
m_bool(boolean_value)
{
}
~Derived_encapsulated_class(void)
{
}
private:
bool m_bool;
};
这种方法在派生类对象中为我提供了 m_encapsulated_class
的两个实例,这在 c++ 中显然是合法的(我有点惊讶)。
但这不是我想要的。我希望派生类中有一个 m_encapsulated_class
成员。那么是否可以在基类中扩展复合成员呢?
最佳答案
您可以使用虚拟 getter 来强制继承成员:
class Base_class
{
public:
Base_class(int int_value, short short_value) :
m_encapsulated_class(int_value, short_value)
{};
protected:
virtual Base_encapsulated_class Get_encapsulated_class() /* = 0 if you want to enforce encapsulated derivation */
{
return m_encapsulated_class;
}
private:
Base_encapsulated_class m_encapsulated_class;
};
class Derived_class : public Base_class
{
public:
Derived_class(int int_value, short short_value, bool boolean_value) :
Base_class(int_value, short_value)
{};
~Derived_class(void)
{};
protected:
virtual Base_encapsulated_class Get_encapsulated_class()
{
return m_derived_encapsulated_class;
}
private:
Derived_encapsulated_class m_derived_encapsulated_class;
};
关于c++如何扩展具有组合的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22470492/