【问题标题】:accessing data member through composition通过组合访问数据成员
【发布时间】:2019-03-30 02:54:24
【问题描述】:

我的基类中有一个 struct obj。我不知道如何通过 Derv1 类(派生自基类)访问结构的数据成员。我尝试让 Base 和 Derv1 都成为 struct 的朋友 - 它仍然告诉我“数据成员是私有的”(它仅在 Base 中是私有的)。

示例:

struct A{
    public :
        int total;
        //some stuff
};
class MyClass{ // [Base] class
    private:
      A var1;
};

class Derv1{
    private:
        //some stuff
        public void display_var1(Derv1 x){
            return x.var1.total;
        }  // trying to return the value of A.total
};

我希望这是有道理的,以便您可以帮助我.. 谢谢你,

【问题讨论】:

  • 也许你可以把minimal reproducible example 放在一起,这样我们就可以看到你在做什么?
  • 哎呀,这是我在这里输入的错误--我实际上确实从 Base 继承了 dev1 .. 只是无法访问 struct 数据成员.. 我必须制作 obj保护可能在基类中...... ???
  • 通常,如果您想更新问题,可以使用问题下方的edit link 进行更改,但鉴于已发布讨论问题的可行答案,这将是不好的形式使它们无效。相反,您应该利用您在这里学到的知识并提出一个新问题。

标签: c++ object struct


【解决方案1】:

首先,您必须确保 Derv 派生自 MyClass。

class Derv1 : public MyClass { ... };

然后,您需要找出显示变量的最佳方式。

我的建议:

  1. 在基类中创建virtual 成员函数。
  2. 覆盖派生类中的函数。
  3. 确保在派生类实现中调用基类实现。

class MyClass { // [Base] class

    public:

        virtual void display() const
        {
           // Display var1 anyway you wish to.
        }

    private:
      A var1;
};

class Derv1 : public MyClass {

    public:

        virtual void display() const
        {
           // Call the base class implementation first
           MyClass::display():

           // Display anything else that corresponds to this class
        }

    private:
        //some stuff
};

【讨论】:

    【解决方案2】:

    我认为您必须将 Derv1 类扩展到 Base 类:

    class Derv1: public MyClass{
    

    继承基类的成员

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2019-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多