我有
class outer: public base
{
public:
class inner
{
foo();
}
}
答案 0 :(得分:6)
我猜你是来自java。
c ++嵌套的struct / class类似于java static
嵌套类型。它与包含类型没有实例关系。
实际上,您应该能够将内部类移动到包含的命名空间,而不需要将前内部类标记为外部类的朋友的其他更改。
- 如何初始化这些嵌套类?
醇>
你没有。您只能初始化成员(类实例)
- 我可以从外部类调用foo()吗?
醇>
除非您是朋友或方法(foo())是公开的
- 请告诉我在嵌套课程和访问成员时我应该知道的拇指规则是什么?
醇>
我只选择
的嵌套类型我在下面说明了这些“经验法则”。请注意嵌套类型如何透明地访问外部类的私有成员。
struct base {};
class outer: public base
{
private:
enum { some=42, special=67, implementation=999, details=-13 };
public:
struct inner
{
protected:
void foo() { int can_usethis = special + implementation + details; }
};
outer() : _inner() { }
void call_inner(inner& i) const
{
//i.foo(); // fails (protected)
}
void call_inner() const
{
//_inner.foo(); // fails (protected)
}
private:
inner _inner;
};
int main()
{
outer o;
outer::inner i;
// i.foo(); // fails: protected
o.call_inner(i);
}
答案 1 :(得分:1)
您可以使用范围运算符::(outer :: inner())来实例化内部对象。如果你想从外部类加入foo(),你可能想要定义外部像内部的朋友类。