通过类级别访问私有变量。

时间:2014-08-12 15:41:17

标签: c++ oop encapsulation

因此,在我目前对如何正确使用封装的理解中,将变量设为私有并通过类的成员函数访问它们是一个很好的经验法则:

class Aclass{
private:
    int avar;
public:
    void ch_avar(int val){avar = val};
    int get_avar() {return avar;}
};

我的问题是如何访问类实例的私有成员,该类实例是另一个类的私有成员。这是我尝试这样做的一个例子(不是为了简洁而重新输入上面的例子)

class LargerClass{
private:
    int other_var;
    Aclass A; //has two instances of class "Aclass" 
    Aclass B; 
public: 
    void ch_other_var(int val){other_var = val;}
    int get_other_var() {return other_var;}

     // this is the important line for the question
    int get_avar(Aclass X){return X.get_avar();} 
}; 

现在在我的真实程序中还有一些其他级别,我不断收到“Aclass”是未知类型的编译错误。即使我已经在较大的类中包含了Aclass的头文件。因为我被卡住了,所以我觉得如果能做出我想要的正确(或可接受的方式),那将是一件好事。我是OOP的新手,这对我来说很邋。

1 个答案:

答案 0 :(得分:2)

要访问类实例的私有成员,这是其自身的另一个类的私有成员,可以这样做。您不需要传递Aclass X.这是不必要的。您可以通过您给出的实例名称来调用它。

class LargerClass{
private:
    int other_var;
    Aclass A; //has two instances of class "Aclass" 
    Aclass B; 
public: 
    void ch_other_var(int val){other_var = val;}
    int get_other_var() {return other_var;}

     // this is the important line for the question
    int get_avar_A(){return A.get_avar();} 
}; 

如果你有20个Aclass实例,那么你要创建一个Aclass实例的向量。

class LargerClass{
private:
    int other_var;
    Aclass A[20]; 
public: 
    void ch_other_var(int val){other_var = val;}
    int get_other_var() {return other_var;}

     // this is the important line for the question
    int[] get_avar_A()
   {
     int other_var[20];
     for(int i= 0; i<20; i++)
     {
       other_var[i] = A[i].get_avar();
     }
     return other_var;
    } 
};