我有一个基本的数据成员类:
class DataClass {
}
和一个子类:
class DerivedDataClass : public DataClass {
}
我使用DataClass作为类DataClassList的私有(private)成员
class DataClassList {
public:
// some useful functions here
private:
DataClass private_data;
}
我想子类化DataClassList来创建一个可以在DerivedDataClass上运行的类
class DerivedDataClassList : public DataClassList {
// how do i get this class to use DerivedDataClass as the private member?
}
可以在C++中以某种形式完成吗?
编辑:
关于我要执行的操作添加更多注释:
DataClass
具有一些有用的功能,我不想在DerivedDataClass
中重新定义,并且DerivedDataClass
具有自己的功能。因此,继承是有道理的。到目前为止一切都很好。下一级是问题。
DataClassList
具有取决于DataClass
函数的有用函数。除了基本类提供的有用功能外,DerivedDataClassList
还需要从DerivedDataClass
访问数据/运行功能。无法将
DataClass
中的私有(private)DataClassList
成员更改为DerivedDataClass
,我无法从DerivedDataClass
中的DerivedDataClassList
调用函数。 最佳答案
我假设您想在DataClass
中使用private_data
对象DerivedDataClassList
。
如果要使用DerivedDataClass
,则需要在某个地方声明DerivedDataClass
的对象(我在任何地方都看不到DerivedDataClass
的对象)。或者您需要从DerivedDataClass
继承-我再次在您的代码中看不到。
class DataClassList
{
protected:
DataClass private_data;
};
class DerivedDataClassList : private DataClassList
{
// DataClass object private_data is like a private member here
};
如果您使
private_data
成为protected
的DataClassList
成员而不是private
,并且使DataClassList
成为private base class
的DerivedDataClassList
,则private_data
的作用类似于private
的DerivedDataClassList
成员。如果您的原始问题没有输入错误,并且您实际上希望将DerivedDataClass对象作为私有(private)成员,则可以使用指针。
class DataClassList
{
public:
DataClassList(DataClass * p) : private_data(p) {}
protected:
DataClass * private_data;
};
class DerivedDataClassList : private DataClassList
{
public:
DerivedDataClassList():DataClassList(new DerivedDataClass) { }
// private_data which a pointer to a DerivedDataClass object is like a private member here.
};