class outer: public base
{
public:
class inner
{
foo();
}
}
- 我如何初始化这些嵌套类?
- 我可以从外部类调用foo()吗?
- 你能告诉我什么是我应该知道的嵌套类和访问成员的拇指规则? 谢谢
class outer: public base
{
public:
class inner
{
foo();
}
}
我想你是来自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);
}
您也可以使用范围操作符::实例内的对象(外::内())。如果你想从外部类接受foo(),你可能想要定义类似inner的外部类似的朋友类。
这功课吗?它似乎是功课,总是使用作业标签 – SpeedBirdNine