《挑战30天C++入门极限》C++类静态数据成员与类静态成员函数
C++类静态数据成员与类静态成员函数 在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态)的,但是我们为了简化代码,使要说明的问题更为直观,更容易理解,我们在此处都设置为public。 以下程序我们来做一个模拟访问的例子,在程序中,每建立一个对象我们设置的类静态成员变自动加一,代码如下: #include <iostream> 上面代码我们用了几种常用的方式建立对象,当建立新对象并调用其构造函数的时候,静态成员cout便运行加1操作,静态成员的初始化应该在主函数调用之前,并且不能在类的声明中出现,通过运行过程的观察我们发现,静态成员count的状态并不会随着一个新的对象的新建而重新定义,尽而我们了解到静态成员函数由于与对象无关系,所以在其中是不能对类的普通成员进行直接操作的。 如果上面的 static void Internet::Sc()//静态成员函数 静态成员函数与普通成员函数的差别就在于缺少this指针,没有这个this指针自然也就无从知道name是哪一个对象的成员了。 根据类静态成员的特性我们可以简单归纳出几点,静态成员的使用范围: 1.用来保存对象的个数。 2.作为一个标记,标记一些动作是否发生,比如:文件的打开状态,打印机的使用状态,等等。 3.存储链表的第一个或者最后一个成员的内存地址。 为了做一些必要的练习,深入的掌握静态对象的存在的意义,我们以前面的结构体的教程为基础,用类的方式描述一个线性链表,用于存储若干学生的姓名,代码如下: #include <iostream> 从上面的代码来看,原来单纯结构化编程需要的一个链表进入全局指针在这里被类的静态成员指针所替代(类的静态成员完全可以替代全局变量),这个例子的理解重点主要是要注意观察类成员的析构顺序,通过对析构顺序的理解,使用析构函数来进行节点的脱链操作。 |
|||
最新文章
- Maven实战:Maven生命周期
- Ubuntu 16.04 软件中心闪退 解决方案
- 转@ManyToMany- annotation关系映射篇(下)
- 【CSS】使用CSS选择器(第二部分)
- wp8 入门到精通 数据库更新字段(一)
- MINIX3 进程调度分析
- 容易导致outofmemoryException内存泄漏异常的编码问题
- [ZZ]C++中,引用和指针的区别
- ADO.Net增、删、改、查
- 黑马day07 注册案例(二)
- Mongoose与bluebird结合使用实例
- 零售业山重水复,全景行柳暗花明——VR全景智慧城市
- spring和mybatis的整合开发(基于MapperFactoryBean的整合开发(方便简单不复杂))
- python-循环小练习
- docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面
- JQuery监听页面滚动总结
- tomcat设置开机自启动和后台运行
- SharePoint Online 设置网站集
- DHTML【9】--Javascript
- IIS上部署DotNet Core程序