• 局部类


      实际应用中大部分的类都是定义在头文件中,且一个头文件一般都只定义一个类,这样做不仅代码简洁,逻辑清楚其实还有一个好处就是保持类的定义一致

      类可以在函数体内定义,但是在函数体内定义的类即局部类受到了一些限制,所以类一般都不定义在函数体内;

      在函数体外定义类时,在各个知道的源文件中可能只有一处该类的定义,而且如果要在不同的文件中使用同一个类,类的定义就必须保持一致,

      为了确保各个文件中的类定义一致,类通常定义在头文件中,而且当一个头文件中只有一个类时,类所在头文件的名字应与类的名字一样

      

      局部类:局部类的所有成员(包括函数在内)都必须完整定义在类的内部。因此,局部类的作用与嵌套类相比相差很远

        在实际编程的过程中,因为局部类的成员必须完整定义在类的内部,所以成员函数的复杂性不可能太高。局部类的成员函数一般只有几行代码,否则我们就很难读懂它了。

        类似的,在局部类中也不允许声明静态数据成员,因为我们没法定义这样的成员。

      局部类不能使用函数作用域中的变量

        局部类对其外层作用域中名字的访问权限收到很多限制,局部类只能访问外层作用域定义的类型名,静态变量以及枚举成员。

        如果局部类定义在某个函数内部,则该函数的普通局部变量不能被局部变量使用

      常规的访问保护规则对局部类同样适用

        外层函数对局部类的私有成员没有任何访问特权。当然,局部类可以将外层函数声明为友元:或者更常见的情况是局部类将其成员声明成公有的。

        在程序中有权访问局部类的代码非常有限。局部类已经封装在函数作用域中,用过信息隐藏进一步封装就显得没有什么必要了

      局部类中的名字查找

        局部类内部的名字查找次序与其他类相似。在声明类的成员时,必须先确保用到的名字位于作用域中,然后再使用该名字。

        定义成员时用到的名字可以出现在类的任意位置。如果某个名字不是局部类的成员,则继续在外层函数作用域中查找;如果还没找到,则在外层函数所在作用域中查找

      嵌套的局部类

        可以在局部类的内部再嵌套一个类,此时,嵌套类的定义可以出现在局部类之外。不过,嵌套类必须定义在与局部类相同的作用域中。

        void foo() 

        {

          class Bar {

            public:

              //...

              class Nested;  //声明Nested类

          }

          // 定义Nested类

          class Bar::Nested {

            //...

          };

        }

        和往常例子一样,当我们在类的外部定义成员时,必须指明该成员所属的作用域。因此在往常的例子中,Bar::Nested的意思是Nested是定义在Bar的作用域内的一个类。

        局部类内的嵌套类也是一个局部类,必须遵守局部类的各种规定。嵌套类的所有成员都必须定义在嵌套类内部

  • 相关阅读:
    linux系统调用是通过软中断实现的吗
    Linux系统调用怎么和内核或底层驱动交互的
    strace命令
    linux 用户态和内核态以及进程上下文、中断上下文 内核空间用户空间理解
    C语言string.h常用函数总结
    shall的过去式和should怎么区分
    P(Y|X) 和 P(X,Y)
    Sourceinsight最佳配色方案及颜色字体调整方法
    float 为什么可以表示很大的整数
    协方差矩阵
  • 原文地址:https://www.cnblogs.com/qianqiannian/p/6598498.html
Copyright © 2020-2023  润新知