如何访问对象的私有成员?

时间:2013-12-12 01:06:37

标签: c++ oop private public

假设我有一个成员对象的类:

class Class1
{
    private:
        Class2 anObject;
}

一个整数变量和另一个类中的访问器:

class Class2
{
    private:
        int aVariable;
    public:
        int getAVariable()
        {
             return aVariable;
        }
}

从main访问aVariable的最佳方法是什么?

例如,如果anObject被声明为公共而非私有,我可以在main中执行此操作:

int main()
{
    Class1 Class1Object;
    cout << Class1Object.anObject.getAVariable() << '\n';
}

但如果anObject保密,我该如何做?

3 个答案:

答案 0 :(得分:3)

获取第1课中所需对象的公共getter。

public:
    Class2 getObject()
    {
         return anObject;
    }

然后你可以做

 int main()

{
Class1 Class1Object;
cout << Class1Object.getObject().getAVariable() << '\n';
}

答案 1 :(得分:1)

在这种情况下,您可以在Class1上定义一个访问器(get函数),它只返回在Class2上调用getAVariable()的结果。

答案 2 :(得分:0)

您有两种选择:

class Class1
{
    public:
        int getAVariable()                   //Option 1, Get the int directly
        {
            return anObject.getAVariable()
        }
        Class2 getAnObject()                 //Option 2, Get a copy of the object
        {                                    
            return anObject
        } 
    private:
        Class2 anObject;
}

选项1:是AboutAverage建议的。但是,如果您在Class2中有多个私人成员,那么您需要Class1

中的每个成员的访问者

选项2:aafonso1991刚刚打败了我。它会返回anObject的副本,因此anObject中的Class1仍然未被修改。这是更好的OO选择,因为您不需要创建额外的功能并保存这些代码行。它可能是运行时的问题,但如果Class2特别大并且复制它很昂贵。在这种情况下,您可以为Class1

的常用成员创建类似option1的访问器