我可以将私有成员细分为派生类吗? [英] Can I subclass private members in a derived class?
问题描述
我有一个基本的数据成员类:
I have a base data member class:
class DataClass {
}
和一个子类:
class DerivedDataClass : public DataClass {
}
我将DataClass用作类DataClassList的私有成员
I use DataClass as a private member of a class, DataClassList
class DataClassList {
public:
// some useful functions here
private:
DataClass private_data;
}
我想对DataClassList进行子类化,以创建可以对DerivedDataClass进行操作的类
I want to subclass DataClassList to create a class that can operate on DerivedDataClass
class DerivedDataClassList : public DataClassList {
// how do i get this class to use DerivedDataClass as the private member?
}
这可以用C ++的某种形式完成吗?
Can this be done in some form in C++?
添加关于我要执行的操作的更多注释:
Adding some more notes on what I'm trying to do:
DataClass
具有一些有用的功能,我不想在DerivedDataClass
中重新定义,而DerivedDataClass
具有其自己的功能.因此,继承是有道理的.到目前为止一切都很好.
DataClass
has some useful functions that I don't want to redefine in DerivedDataClass
and DerivedDataClass
has functions of its own. So, inheritance makes sense. All is good so far.
下一个级别是问题. DataClassList
具有有用的功能,这些功能取决于DataClass
功能.除了基类提供的有用功能之外,DerivedDataClassList
还需要从DerivedDataClass
访问数据/运行功能.
The next level is the issue. DataClassList
has useful functions that depend on DataClass
functions. DerivedDataClassList
will need to access data/run functions from DerivedDataClass
in addition to the useful functions provided by the base classes.
无法将DataClassList
中的私有DataClass
成员更改为DerivedDataClass
,所以无法从DerivedDataClassList
中的DerivedDataClass
调用函数.
Without being able to change the private DataClass
member in DataClassList
to DerivedDataClass
, I cannot call functions from DerivedDataClass
in DerivedDataClassList
.
推荐答案
我假设您要在DerivedDataClassList
中使用DataClass
对象private_data
.
如果要使用DerivedDataClass
,则需要在某个地方声明DerivedDataClass
的对象(我在任何地方都看不到DerivedDataClass
的对象).或者您需要从DerivedDataClass
继承-我再次在您的代码中看不到.
I am assuming you want to use DataClass
object private_data
in DerivedDataClassList
.
If you want to use DerivedDataClass
, then you need to declare an object of DerivedDataClass
somewhere (I don't see an object of DerivedDataClass
anywhere). Or you need to inherit from DerivedDataClass
- which I again I don't see in your code.
class DataClassList
{
protected:
DataClass private_data;
};
class DerivedDataClassList : private DataClassList
{
// DataClass object private_data is like a private member here
};
如果将private_data
用作DataClassList
的protected
成员而不是private
,并且将DataClassList
用作private base class
的DerivedDataClassList
,则private_data
的作用类似于private
成员DerivedDataClassList
.
If you make private_data
as a protected
member of DataClassList
instead of private
and you make DataClassList
a private base class
of DerivedDataClassList
, then private_data
acts like a private
member of DerivedDataClassList
.
如果您的原始问题没有输入错误,并且您实际上希望将DerivedDataClass对象作为私有成员,则可以使用指针.
If your original question was not mistyped and you actually wanted DerivedDataClass object as a private member, then you can use pointers.
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.
};
这篇关于我可以将私有成员细分为派生类吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!