嵌套类简单问题
在书上看到:外围类不能访问嵌套类的受保护成员(意指protected/private成员),除非将外围类声明为嵌套类的友元。
但是下面的类定义居然成功地通过了编译:
class outer{
private:
int f;
class inner{
public:
void test(outer o)
{
cout << o.f;//这里明明引用了外围类的私有成员"f",可是编译器没有报错
}
};
};
这是为什么呢???望高手指教!!
问题点数:20、回复次数:8Top
1 楼UPCC(杂食动物)回复于 2006-07-03 11:40:31 得分 4
这是对的啊,就想函数访问外边的变量的道理一样啊,域的问题Top
2 楼Improving()回复于 2006-07-03 11:47:02 得分 4
outer类是外围类,inner是嵌套类。外围类不能访问嵌套类的受保护成员。而你这个例子是:在嵌套类中访问外围类的成员,这是允许的。Top
3 楼triace_zhang(『雪梨码头』)回复于 2006-07-03 11:50:46 得分 4
LZ的本意是这个吧。
class outer{
private:
int f;
class inner{
public:
void test(outer o)
{
cout << o.f;//这里明明引用了外围类的私有成员"f",可是编译器没有报错
}
private:
int m;
};
inner in;
void ff() { in.m; } //错误,m是in的private成员.
};Top
4 楼YeTimmy()回复于 2006-07-03 11:55:36 得分 4
vc下就编译通不过
在C++ Primer里面也写着是不能访问的
可是在Dev-C++中却通过了,不知道该相信谁-_-#Top
5 楼routecpp(努力中)回复于 2006-07-03 12:07:59 得分 0
少写了一句话“嵌套类也没有任何特权访问其外围类的私有成员”。
出处:c++ primer(第3版)552页Top
6 楼triace_zhang(『雪梨码头』)回复于 2006-07-03 12:45:58 得分 4
楼主没有仔细看书啊,试试:
#include <iostream>
using namespace std;
class outer{
private:
int f;
public:
class inner{
public:
void test(outer o)
{
cout << o.f;//这里明明引用了外围类的私有成员"f",可是编译器没有报错
}
};
private: //先编译一遍,再把这儿改为public: 试试。
inner in; //定义一个嵌套类的成员
};
int main()
{
outer ot;
ot.in.test( ot ); //用嵌套类成员调用外围类的函数
return 1;
}
书里说得是:嵌套类的private成员无法访问外围类的变量
^^^^Top
7 楼OOPhaisky(异化$渴望成功~~)回复于 2006-07-03 13:19:36 得分 0
to triace_zhang(『雪梨码头』) :
"嵌套类的private成员无法访问外围类的变量",首先没找到这句话,其次这句话与我的问题好像没有关系阿。
我的问题是,书上552页“嵌套类也没有任何特权访问其外围类的私有成员”??Top
8 楼OOPhaisky(异化$渴望成功~~)回复于 2006-07-03 16:25:48 得分 0
哎?楼主怎么结贴了???问题还没有解决阿?
我也借贵宝地问你那个问题啊,跟你有相同的困惑!!Top




