5.8 局部类和嵌套类

 

5.8 局部类和嵌套类

5.8.1 局部类

在一个函数体内定义的类称为局部类。局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关。在定义局部类时需要注意:局部类中不能声明静态成员函数,并且所有成员函数都必须定义在类体内。在实践中,局部类是很少使用的。下面是一个局部类的例子:

int a;

void fun() {
    static int s;
    class A {
    public:
        void init(int i) { s = i; }
    };
    A m;
    m.init(10);
}

在这个例子中,函数 fun() 中定义了一个局部类 A。局部类的类名 A 被隐藏在包围它的函数 fun() 内。

5.8.2 嵌套类

在一个类中定义的类称为嵌套类。嵌套类定义可以提高抽象能力,并且强调了类的封装,从而限制用户使用该类建立对象。嵌套类的类名只能在外围类的作用域中使用。下面是一个嵌套类的例子:

class A {
public:
    class B {
    public:
        // B的成员函数和成员变量
    private:
        // B的私有成员
    };
    void f();
private:
    int a;
};

在这个例子中,类 B 是一个嵌套类,定义在类 A 的类体内。类 A 是外围类。下面是对嵌套类的一些说明:

  1. 作用域

    • 嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。在外围类的作用域外使用该类名时,需要加类名限定。
  2. 访问权限

    • 嵌套类名与它的外围类的对象成员名具有相同的访问权限规则。不能访问嵌套类对象中的私有成员。
  3. 成员函数定义

    • 嵌套类中的成员函数不可以在它的类体外定义。
  4. 成员访问

    • 嵌套类中的成员不是外围类中对象的成员,反之亦然。嵌套类的成员函数对外围类的成员没有访问权,反之亦然。因此,在分析嵌套类与外围类的成员访问关系时,往往把嵌套类看作非嵌套类来处理。
  5. 友元

    • 在嵌套类中声明的友元对外围类的成员没有访问权。

示例代码重新组织

为了更好地理解嵌套类,可以将上面的嵌套类代码分开,以展示嵌套类实际上只是语法上的嵌入:

class A {
public:
    void f();
private:
    int a;
};

class B {
public:
    // B的成员函数和成员变量
private:
    // B的私有成员
};

通过这种方式,可以看出嵌套类仅仅是语法上的嵌入,其成员的访问权限与普通类相同。

总结

局部类和嵌套类在C++中提供了一种更细粒度的封装和作用域控制机制。局部类在函数内定义,用于限制类的作用域在函数内部,而嵌套类则在类内定义,用于实现更复杂的类结构和数据封装。这些特性有助于更好地管理代码的复杂性和安全性,但需要注意使用场景和限制。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值