C++嵌套类

C++嵌套类

1.什么是嵌套类

将一个类的定义放到另一个类中,这个类就叫嵌套类

2.嵌套类的作用域(可见性)

嵌套类的作用域与定义的位置有关

I>声明在私有区域(private)

仅在外围类内部可见

也就是说,这种情况下,嵌套类的实例化对象可以当作外围类的数据成员,也可当作外围类的成员函数的参数或者在成员函数内部实例化。

class Outer {
private:
    class Inner {
        ...
    };

    Inner objInner;     //第一处
    ...
public:
    void f(Inner &Inner);   //第二处
    void g();
    ...
};

void Outer::g() {
    Inner objInner;     //第三处
    ...
}

第一处:嵌套类的实例化对象作为外围类的成员
第二处:嵌套类的实例化对象作为外围类成员函数的参数
第三处:嵌套类的实例化对象作为外围类成员函数的局部变量

II>声明在保护区域(protected)

仅在外围类和外围类的派生类内部可见

这种情况下,嵌套类的实例化对象可作为在外围类及外围类的派生类的成员,以及它们的成员函数的参数或者在它们的成员函数内部实例化。

class Outer {
protected:
    class Inner {
        ...
    };
    ...
};

class Derived :public Outer {
    Inner objInner;         //派生类可见
    ...
};

除了private可见的地方,还有派生类中可见。

III>声明在公有区域(public)

外围类内、外部均可见

这种情况下,嵌套类和外围类没有明显区别,可以在类外实例化,但是要通过域解析运算符 外围类::嵌套类 实例化对象名。

class Outer {
public:
    class Inner {
        ...
    };
    ...

};


int main() {

    Outer::Inner obj;       //在类的外部实例化嵌套类
    ...
    return 0;
}

总结:嵌套类、结构和枚举的作用域特征

声明位置包含它的类是否可以使用它从包含她的泪派生而来的类是否可以使用它类的外部是否可以访问它
私有部分
保护部分
公有部分

2.嵌套类与外围类的关系

I>作用域(上面已经总结)

II>嵌套类是外围类的友元类

class Outer {
private:
    int data;
public:
    Outer(int data) : data(data) {}
    class Inner {
    public:
        void showOuter(Outer &obj);
    };
};

void Outer::Inner::showOuter(Outer &obj) {
    cout << obj.data << endl;
}

int main() {

    Outer objo(3);
    Outer::Inner obji;
    obji.showOuter(objo);

    return 0;
}

输出:

3

注意:嵌套类仅仅是友元而已,它不属于外围类,也就是说,在访问时必须给它传一个外围类的对象

III>外围类不能直接访问嵌套类

要想访问嵌套类的私有成员,嵌套类必须提供公有接口,外围类只能通过共有接口间接访问嵌套类私有成员。

3.理清关系

I>嵌套类和外围类是两个类,只不过嵌套类声明在外围类里面

II>嵌套类是外围类的友元类

III>嵌套类的可见性与在外围类中声明的位置有关

如果在public区域声明,这种情况下相当于在一个命名空间声明了一个类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值