【问题标题】:Accessing a member function through an object通过对象访问成员函数
【发布时间】:2014-09-30 08:42:09
【问题描述】:

所以我有两个班级,比如说class Aclass B。在 B 类的构造函数中,我创建了一个 A(私有)类型的对象。在 A 类中,我有一个显示 A 内容的成员函数void displayA()

现在我运行int main(),我创建了一个 B 类型的对象(理想情况下也是存储在 B 中的 A 类型的对象)。我的问题是如何使用 A 到 B 中的方法?

我试过objB.displayA(),但这显然没有用。我是否需要在 B 中创建一个调用 A 中的成员函数的成员函数?或者有没有更优雅的解决方案

【问题讨论】:

    标签: c++ function object member


    【解决方案1】:

    class B 必须有一个class A 类型的成员变量。例如:

    class B
    {
    public:
        A a;
        int x;
    };
    

    那么你可以这样称呼它:

    B objB;
    objB.a.displayA();
    

    【讨论】:

    • 不知道,谢谢 :) 但是如果 object a 是私有的呢?我需要吸气剂吗?
    • 是的。考虑让 B 有一个调用 a.displayA 的函数,而不是纯粹的 getter(它们通常不是一个好主意)。如果您为a 的每个功能都添加了getter 等,那么您也可以将a 公开。
    【解决方案2】:

    你要么需要传递objB你正在改变的class A的实例,然后在你传递它的函数中,调用obA.displayA();,或者你可以创建objA作为@的类变量987654325@,然后在B的任意函数中调用objA.displayA();

    【讨论】:

      【解决方案3】:

      首先,你没有公有私吗? 并且,您在您的 B 类中,是否有类型为 A 类的变量; 像这样

      #include <iostream>
      class A
      {
          public:
              void displayA() {
                  std::cout << "call a" << std::endl;
              }   
      };
      
      class B
      {
          public:
              B():a(){}
              A a;
      };
      int main(int argc, const char *argv[])
      {
          B b;
          b.a.displayA();
          return 0;
      }
      

      比thd类B还可以:

      `class B
       {
        public:
            B():a(){}
            A a;
            void call() {
                this -> a.displayA();
            }
        };`
      

      然后调用 B 类中的 call()

      【讨论】:

      • 他们是私人的,抱歉
      • 你的意思是a的变量是私有的?第二类B上面的代码可以调用displayA(),0.0
      • 对象 a 是私有的。只有构造函数和成员函数是公共的。然后我应该为对象 a 添加一个 getter 吗?
      • 是的,它可以获取私有变量a,你最好阅读thisthis它可以解决你的问题,:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 2012-07-07
      • 2011-04-07
      相关资源
      最近更新 更多