2014-09-30 301 views
-2

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

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

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

回答

2

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

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

然后,你可以这样调用:

B objB; 
objB.a.displayA(); 
+0

不知道的是,谢谢:)但是,如果“对象a”是私人的呢?我需要吸气剂吗? – TheGuyWithStreetCred 2014-09-30 09:05:05

+0

是的。考虑让B有一个调用'a.displayA'的函数,而不是纯粹的'getter'(它们通常不是一个好主意)。如果你为'a'的每个功能输入getter等,那么你也可以让'a'公开。 – 2014-09-30 09:17:43

+0

谢谢你,很好的建议 – TheGuyWithStreetCred 2014-09-30 09:29:29

1

你要么需要通过objBclass A你正在改变实例,然后你通过它里面的功能,来电obA.displayA();,或者你可以创建objAobjB类变量,然后在B的任意函数中调用objA.displayA();

1

第一,你没有公共和私有? 以及你在你的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类

+0

他们是私人的,对不起 – TheGuyWithStreetCred 2014-09-30 09:07:35

+0

你的意思是a的变量是私人的,并且上面的secend B类代码可以调用displayA(),0.0 – ipaomian 2014-09-30 09:11:20

+0

对象a是私人的。只有构造函数和成员函数是公共的。我应该为对象添加一个吸气剂吗? – TheGuyWithStreetCred 2014-09-30 09:16:13

相关问题