zoukankan      html  css  js  c++  java
  • 局部类

    类可以定义在某个函数的内部,称这样的类为局部类。局部类定义的类型只在定义它的作用域内可见。

    和嵌套类不同,局部类的成员受到严格限制。

    • 局部类的成员函数一般不会特别复杂,一般只有几行代码。
    • 在局部类中不允许声明静态数据成员,因为没法定义这样的成员。

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

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

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

    int a, val;
    void foo(int val)
    {
    	static int s_i;
    	enum Loc{a=1024,b};
    	struct Bar {
    		Loc locVal;
    		int barVal;
    
    		void fooBar(Loc l = a)
    		{
    			barVal = val;	//@ error,val 是 foo 的局部变量
    			barVal = ::val;	//@ ok,使用一个全局对象
    			barVal = s_i;	//@ ok,使用一个静态局部变量
    			locVal = b;		//@ ok,使用一个枚举成员
    		}
    	};
    
    	//@ ....
    }
    

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

    外层函数对于局部类的私有成员并没有任何特殊的访问权限。局部类可以将外层函数声明为友元,或者更常见的方式是局部类将其成员声明成公有的。

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

    局部类中的名字查找

    局部类内部的名字查找次序与其他类相似。在声明类的成员时,必须先确保用到的名字位于作用域中,然后再使用该名字。定义成员时用到的名字可以出现在类的任意位置:如果名字不是局部类的成员,则继续在外层函数作用域中查找;如果没有找到,则在外层函数所在作用域中查找。

    嵌套的局部类

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

    void foo()
    {
    	class Bar {
    	public:
    		//@ ...
    		class Nested;	//@ 声明 Nested 类
    	};
    	
    	//@ 定义 Nested 类
    	class Bar::Nested {
    		//@ ...
    	};
    }
    

    内部嵌套类也是一个局部类,也需要遵守局部类的各种规定。

  • 相关阅读:
    idea 配置 scala
    Error contacting service. It is probably not running.
    ipc.Client: Retrying connect to server: .../10.0.0.27:10020. Already tried 6 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1 SECONDS)
    hadoop安装配置
    WordCount-JAVA版
    scp、rsync、xsync
    我所经历的开题
    无情的岁月之流水一般的一年级
    数据挖掘中易犯的几大错误【转载,侵删】
    如何摧毁程序员的效率?【转载,侵删】
  • 原文地址:https://www.cnblogs.com/xiaojianliu/p/12491533.html
Copyright © 2011-2022 走看看