int a;
void fun()
{
static int s;
class A
{
public:
void init(int i) { s = i; }
};
A m;
m.init(10);
}
class Interface
{
public:
virtual void Fun() = 0;
};
template
Interface* MakeAdapter(const T& obj, const P& arg)
{
int x;
class Local : public Interface
{
public:
Local(const T& obj, const P& arg)
: obj_(obj), arg_(arg) {}
virtual void Fun()
{
x = 100;
obj_.Call(arg_);
}
private:
T obj_;
P arg_;
};
return new Local(obj, arg);
}
是在類體內定義的又一個類。外面的類叫外圍類。這個類以及由它創建的對象,都局限在外層類作用域中;
外界能否使用內層類,全在於訪問權限;若能使用,定要以外圍類::內層類格式來用;
是類組合演化的又一種類間關系,即組合或聚集成員不是產生於其它類,而是產生於內層類;內層類的成員函數,可以在類內實現,也可以在外層類之外實現;
內層類的成員函數對外圍類的成員沒有訪問權,反之亦然
class A
{
public:
class B
{
public:
…
private:
…
};
void f();
private:
int a;
}
其中,類B是一個嵌套類,類A是外圍類,類B定義在類A的類體內。class A
{
public:
void f();
private:
int a;
};
class B
{
public:
…
private:
…
};