• Index

嵌套类

Reads: 4

在类声明里面再写一个或者几个类声明,这些在类里面的类就是嵌套类。嵌套类外层的类叫做外围类。因为有不少的情况会出现需要设计一个类,而这个类只被自己设计的另一个类使用,为了限制这个类的范围,一般会把这个类放到另一个类里面,这样就成了嵌套类和外围类了。

请看下面简单的代码:

class enclose // 外围类
{
public:
    class inner // 嵌套类
    {
    };
};

int main(void)
{
    enclose::inner innerobj;
    return 0;
}

从上面代码就可以看出外围类和嵌套类是什么。接下来讲的是嵌套类中需要注意的事项。

嵌套类和独立的类不同的只有一点,就是它可以访问外围类的私有或者保护的静态成员,如下:

class enclose // 外围类
{
public:
    class inner // 嵌套类
    {
    public:
        static int x;
        void func(void)
        {
            // 可以访问外围类的私有或者保护的静态成员
            enclose::a = 0;
        }
    };
private:
    static int a;
};

int enclose::a = 0;
int enclose::inner::x = 0;

int main(void)
{
    enclose::inner innerobj;
    innerobj.func();
    return 0;
}

除此以外,嵌套类跟独立的类在使用上没有任何区别。

如果觉得嵌套类声明的时候缩进比较多的话,那么可以在外围类里面只用前置声明,然后在其他地方再详细声明。例如:

class enclose // 外围类
{
public:
    class inner; // 嵌套类的前置声明
};

class enclose::inner // 嵌套类
{
public:
    void func(void); // 嵌套类的成员函数的声明
};

int main(void)
{
    enclose::inner innerobj;
    innerobj.func();
    return 0;
}

// 嵌套类的成员函数的定义
void enclose::inner::func(void)
{
}

你可以放轻松点,这篇教程的内容比较简单,对吧o(* ̄▽ ̄*)ブ。


Comments

Make a comment

  • Index

WARNING: You are using an old browser that does not support HTML5. Please choose a modern browser (Chrome / Microsoft Edge / Firefox / Sarafi) to get a good experience.