博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
静态成员数据和静态成员函数
阅读量:4462 次
发布时间:2019-06-08

本文共 2554 字,大约阅读时间需要 8 分钟。

  在c++中,经常可以看到static开头的语句,那么这就是在定义静态成员数据或者静态成员函数了。

  

静态成员数据

  类中的某个数据一旦被定义为静态成员数据,那么这个数据就可以被由这个类创建的任何对象共享。这个数据就是静态成员数据。

  注意:一般,类只是定义了其结构、类型,而创建对象时才会分配内存空间。比如一个Student类,其中有一个成员数据totalNumber,且由这个类创建了10个对象,则就会开辟十个相应的空间存储对象,且totalNumber被存在了这个十个对象,处于不同的位置,然而,totalNumber是相同的,如果存储了10份,就会造成浪费,所以出现了静态成员数据的概念。但是,这个静态数据成员只能在类之外进行初始化,在类的里面是不能进行初始化的。 且对静态成员数据访问时,既可以通过创建的对象访问(使用 . 访问符),也可以使用这个类来进行访问(使用 :: 进行访问),举例如下:

  

#include 
#include
#include
using namespace std;class Student{public: static int totalNumber; int getAge() { return this->age; } Student(string name = "wayne", int age = 22, string sex = "male") { name = name; age = age; sex = sex; // 每创建一次对象,totalNumber值加1 totalNumber++; } private: string name; int age; string sex;};int Student::totalNumber = 0;int main(){ cout << "this is the beginning!" << endl; Student wayne("wayne", 22, "male"); Student hedy("hedy", 18, "female"); Student brother("brother", 24, "male"); cout << "创建的学生总数为:" << Student::totalNumber << endl; cout << "创建的学生总数为:" << wayne.totalNumber << endl; return 0;}

 

如上所示:

  • 我们定义了Student类,并且设置了totalNumber为静态成员函数,并且静态成员函数在类之外初始化,而不能在类里初始化。
  • getAge中使用了this->age,因为这些数据成员是有this指针的,另外注意我们构造函数的使用。
  • 因为totalNumber是静态成员函数,所以我们可以使用 类::静态成员函数 的方式访问。另外,我们通过 对象.成员函数 也是可以访问的,并且最终结果相同。

     

 

 

 

 

静态成员函数

  静态成员函数同样也是在类中的函数前加上 static 关键词。同样的,静态成员函数可以通过 类名::静态成员函数 的方式进行访问。

  静态成员函数不能访问类中的一般函数和数据,只能访问类中的静态成员函数,静态成员变量,或者类外的其他函数,这是因为静态成员函数中是没有this指针的。 

  如下所示:

#include 
#include
#include
using namespace std;class Student{public: static int totalNumber; int getAge() { return this->age; } Student(string name = "wayne", int age = 22, string sex = "male") { name = name; age = age; sex = sex; // 每创建一次对象,totalNumber值加1 totalNumber++; } static int getTotal() { return totalNumber; } private: string name; int age; string sex;};int Student::totalNumber = 0;int main(){ cout << "this is the beginning!" << endl; Student wayne("wayne", 22, "male"); Student hedy("hedy", 18, "female"); Student brother("brother", 24, "male"); cout << "创建的学生总数为:" << Student::getTotal() << endl; cout << "创建的学生总数为:" << wayne.getTotal() << endl; return 0;}

  可以看到: 上面的程序中,我们可以使用静态成员函数getTotal访问静态成员数据,并且,同样的,静态成员函数是属于类的,无论创建了多少对象,都只会占用一份内存。且可以通过两种方式来进行访问。 

      

  

 

转载于:https://www.cnblogs.com/zhuzhenwei918/p/8584504.html

你可能感兴趣的文章
多路复用IO模型
查看>>
2019秋招复习笔记--数据库基本操作
查看>>
2019秋招复习笔记--智力题
查看>>
MySQL学习笔记
查看>>
面试题
查看>>
DS博客作业08-课程总结
查看>>
利用Python爬虫刷店铺微博等访问量最简单有效教程
查看>>
浅谈软件测试与墨菲定律
查看>>
文件安全复制之 FastCopy
查看>>
强烈推荐美文之《从此刻起,我要》
查看>>
敏捷开发流程
查看>>
leetcode 412. Fizz Buzz
查看>>
对Netflix Ribbon的Loadbalancer类源码设计合理性的一点质疑
查看>>
关于日历的算法
查看>>
[QT编程]QT实现的一个渐隐渐显窗体
查看>>
在Web工程中引入Jquery插件报错解决方案
查看>>
大学总结之影响我最深的十本书
查看>>
用myEclipse连接数据源生成动态数据报表
查看>>
[myeclipse]@override报错问题
查看>>
자주 쓰이는 정규표현식
查看>>