成员对象 - 为什么只有公共变量可访问?

时间:2011-08-09 20:34:15

标签: c++

在下面的代码中,为什么变量i应该从a类公开?为什么不能私有或受到保护?我想我错过了一些成员对象的基础知识。是吗?

#include <iostream>

class a
{
public:
    int i;
};

class b
{
private:
    a a1;
public:
    void show()
    {
        a1.i=5; 
        std::cout << a1.i;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    b b1;
    b1.show();
    return 0;
}

5 个答案:

答案 0 :(得分:2)

这不是嵌套类。它只是一个碰巧有一个成员变量的类,其类型是另一个类。因此适用正常规则。

答案 1 :(得分:2)

a和b不是嵌套的。

'嵌套'意味着:

class b
{
    class a
    {
    };
};

所以你正在做的只是创建一个内部b的实例。因此,如果您在主函数中定义它,则b具有与a相同的访问权限。

答案 2 :(得分:1)

任何人都可以访问公共成员。受保护的成员只能由派生类和朋友访问。私人会员只能由朋友访问。由于b既不是派生类也不是a的朋友,它只能查看公共成员。如果您希望a.i受到保护,则A必须包含friend b,或者b必须从a继承。

class b;
class a {
    friend b;
    int i;
};  

class b : public a {

答案 3 :(得分:0)

你是说只是因为类b包含一个对象类,应该允许它访问类a的私有成员?如果事情有效,那么隐私就没有太多意义。我在课堂上声明私有,这样你就不必担心它们,所以我可以在不破坏你的代码的情况下改变我班级的私人成员。如果您要求的是真的,那么这些都不会起作用。

答案 4 :(得分:0)

您的课程没有嵌套。只有同一类或多个成员的成员才能访问私有变量。由于“b”不是“a”的成员或朋友,因此您只能通过公开或使用geter和setter方法来访问变量“i”。请参阅:http://www.cplusplus.com/doc/tutorial/classes/ setter方法的一个例子是:

class CRectangle {
    int x, y;
  public:
    void set_values (int,int);
    int area () {return (x*y);}
};

void CRectangle::set_values (int a, int b) {
  x = a;
  y = b;
}

int main () {
  CRectangle rect, rectb;
  rect.set_values (3,4);
  rectb.set_values (5,6);
  cout << "rect area: " << rect.area() << endl;
  cout << "rectb area: " << rectb.area() << endl;
  return 0;
}