我可以将私有成员细分为派生类吗? [英] Can I subclass private members in a derived class?

查看:123
本文介绍了我可以将私有成员细分为派生类吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个基本的数据成员类:

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用作DataClassListprotected成员而不是private,并且将DataClassList用作private base classDerivedDataClassList,则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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆