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