代码编译运行环境:VS2017+Debug+Win32


文章目录

  • 1.嵌套类
  • 2.局部类
  • 参考文献

1.嵌套类

在一个类体中定义的类叫作嵌套类。拥有嵌套类的类叫外围类。

定义嵌套类的初衷是建立仅供某个类的成员函数使用的类类型。目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象。这样可以提高类的抽象能力,并且强调了两个类(外围类和嵌套类)之间的主从关系。

#include <iostream>
using namespace std;class A {public:class B {public:B(char* name) {cout<<"constructing B:"<<name<<endl;}void printB();};B b;A():b("In class A") {cout<<"constructing A"<<endl;}
};void A::B::printB() {cout<<"B's member function"<<endl;
}int main(int argc,char* argv[]) {A a;A::B b("outside of A");b.printB();
}

程序输出结果:

constructing B:In class A
constructing A
constructing B:outside of A
B's member function

对嵌套类的若干说明:
(1)从作用域的角度来看,嵌套类与外围类是两个完全独立的类,只是主从关系,二者不能相互访问,也不存在友元关系。

(2)从访问权限的角度来看,嵌套类既可为私有,也可为公有。在上面的例子中,嵌套类B的访问权限是public,可以在外围类的成员函数之外使用该嵌套类,使用时加上名字限定。如果将嵌套类B的访问权限设置为private,那么只能在外围类内使用。

(3)嵌套类中的成员函数可以在它的类体外定义。

(4)嵌套类可以访问外围类的静态成员变量,即使它的访问权限是私有的,访问方式通过”ClassName::staticVarName”来直接访问。

2.局部类

在一个函数体内定义的类称为局部类。局部类可以定义自己的数据成员和函数成员。它也是一种作用域受限的类。

使用示例:

#include <iostream>
using namespace std;int global=100;void func() {static int s;class A {// static int t; // 编译出错public:int num;void init(int i) { s=i; }void print() {num = global;cout << num << endl;}};A a;a.init(8);cout<<"s:"<<s<<endl;a.print();
}int main(int argc,char* argv[]) {func();
}

程序输出结果:

s:8
100

关于局部类的几点说明:
(1)局部类只能在定义它函数内部使用,在其他地方不能使用;
(2)局部类的所有成员函数都必须定义在类体内,因此在结构上不是特别灵活;
(3)在局部类的成员函数中,可以访问上级作用域的所有变量,如函数局部变量、全局变量等;
(4)局部类中不能定义静态数据成员,因为这种数据成员的初始化无法完成,静态成员数据的定义和初始化必须放在全局作用域。

在实践过程中,局部类很少使用。


参考文献

[1] C++静态数据成员定义及应用浅谈
[2] 陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008.C4.7.P153-156

C++ 嵌套类与局部类相关推荐

  1. C++ 学习笔记之(19) new、delete表达式、RTTI(运行时类型识别)、枚举、类成员指针、嵌套类、局部类、位域、volatile、extern C

    C++ 学习笔记之(19) new.delete表达式.RTTI(运行时类型识别).枚举.类成员指针.嵌套类.局部类.位域.volatile.extern C C++ 学习笔记之(19) new.de ...

  2. C++模板类嵌套类内部类局部类的区别

    模板类就是将类定义成模板的形式. C++中好像不区分内部类与嵌套类两个名词. 内部类与嵌套类都是指在类中定义类. 局部类是指在函数中定义类. (c++不能在函数中定义函数(python可以).c++在 ...

  3. 【Java 面向对象】基础、Java程序的内存划分、嵌套类(内部类、静态嵌套类)、局部类、接口的升级问题(默认方法、静态方法)、instanceof

    面向对象 对象的内存 复杂对象的内存 对象数组的内存 思考:方法存储在哪里? Java程序的内存划分 this.super 注解(Annotation) 访问控制(Access Control) to ...

  4. ZeroC ICE源代码中的那些事 - 嵌套类和局部类

    使用嵌套类(类中定义的类,c++没有静态类)或局部类(在函数或成员方法中定义的类),进行行为模式的委托(委托请求)或异步 . java中嵌套类和局部类隐式完成了你对外部对象(实例)访问的私有堆栈的初始 ...

  5. C++嵌套类的使用及对外部类的访问权限

    C++中的嵌套类与Java中的静态内部类类似,而完全不同于非静态内部类(成员内部类). http://www.cnblogs.com/qzhforthelife/archive/2013/07/31/ ...

  6. 类的相关知识(五)友元和嵌套类

    目录 友元函数 友元类 嵌套类 在类的外面定义嵌套类 访问权限 局部类 友元函数 类的友元函数,该函数可以访问类中所有的成员,包括成员变量和成员函数 class Role {int hp;int mp ...

  7. (教学思路 C#之类五)类的分类(静态类、实例类、嵌套类、结构、简单的抽象类、简单的密封类)...

    本节课我们来学习类的扩展分类,看我的标题中就罗列出了类的分类,类按照声明方式和功能定义共分为这六种类,实例类就是我们一直在用的类,class关键字前没有其他的修饰符,之前已经有很多实例类的使用方法了, ...

  8. Java 嵌套类和内部类演示样例lt;二gt;

    嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...

  9. Kotlin学习笔记 第二章 类与对象 第十节 内部类嵌套类

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

最新文章

  1. 博客园在微信内置浏览器打开时添加微信赞赏码功能
  2. Spring boot 启动后执行特定的操作
  3. js自动判断浏览器类型跳转到手机版
  4. 查看MySQL服务端版本
  5. 网站页首可关闭广告条
  6. 这名程序员28岁就退休了。。。
  7. 动态内存分配导致内存泄漏之处
  8. python处理路径时 sh: 1:Syntax error: ( unexpected
  9. 查看已有设置_腾讯企点呼叫中心如何查看企点电话产生的数据报表?
  10. Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.7:resources
  11. Python 中Python 为什么要继承 object 类
  12. 《Spring实战第四版》随书源码导入Eclipse
  13. 形式语言与自动机 第三章 课后题答案
  14. 光纤通信原理实验装置,QY-JXSY03
  15. Eclipse配置 eclipse Java 配置 eclipse 简单配置 Eclipse 插件 配置 推荐 eclipse插件 eclipse 必备插件
  16. 我,90后,从审计员到程序员,四年在南京买房
  17. 古时候有个【百僧问题】,一百馒头一百僧,大僧三个更无争,小僧三人分一个,大小和尚各几丁? *...
  18. 计算机维护服务蓝图,体验|如何通过服务设计建立品牌感知与品牌认同
  19. VC单位线程是如何处理消息的.txt
  20. 《Java SE实战指南》09-01:访问级别修饰符概述

热门文章

  1. MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken
  2. django分页-Paginator类
  3. 在Linux平台使用Firefox 登陆EBS r12环境
  4. 多线程编程(1): python对多线程的支持
  5. Python字符集编码和文件读写
  6. Centos7挂载iso镜像文件配置本地yum源
  7. 蓝桥杯 ALGO-99 算法训练 薪水计算
  8. L1-051 打折-PAT团体程序设计天梯赛GPLT
  9. 第七届 蓝桥杯 省赛 第六题 方格填数(next_permutation)
  10. Oracle和al,ORACLEAL TERTABLE