提问人:Chad 提问时间:11/21/2008 最后编辑:Don KirkbyChad 更新时间:11/23/2008 访问量:2267
你能在C++中保护嵌套类吗?
Can you have protected nested classes in C++?
答:
8赞
Tyler McHenry
11/21/2008
#1
“继承”这个词用错了,因为它在C++中有一个非常具体的定义,你不是这个意思,但是是的,你可以这样做。这是合法的:
class A {
protected:
class Nested { };
};
class B : public A {
private:
Nested n;
};
不在 A 中的代码或派生自 A 的代码无法访问或实例化 A::Nested。
评论
0赞
Kieveli
11/21/2008
嗯,如果类 B 为 Nested n 提供访问器方法会发生什么?可能是编译错误?
0赞
MSalters
11/21/2008
其实不然。当声明 B 的方法时,名称查找也会发生在类 B 的作用域中。在 B 范围内,A::Nested 是可访问的。因此,A::Nested&B::Get_n()是可以的。
1赞
Tyler McHenry
11/21/2008
嗯,你是对的。A::Nested 是可访问的,因为 B 可以从公共函数返回 A::Nested。B 它仍然不可实例化,所以有趣的是,这导致了不允许调用者存储 B::Get_n() 的返回值的情况。
评论