在下面的代码中,为什么变量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;
}
答案 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;
}