C++静态成员函数

柔光的暖阳◎ 2021-09-19 04:44 481阅读 0赞

一 点睛

与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能处理静态数据成员。

静态成员函数没有this指针。既然它没有指向某一对象,也就无法对一个对象中的非静态成员进行默认访问(即在引用数据时不指定对象名)。

静态成员函数和非静态成员函数的根本区别:非静态成员函数有this指针,而非静态成员函数没有this指针。由此决定了静态成员函数不能访问本类中的非静态成员。

静态成员函数可以直接引用本类中的静态数据成员,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。

假如在一个静态成员函数中有如下语句:

  1. cout<<height<<endl; //若height已声明为static,则引用本类中的静态成员,合法
  2. cout<<width<<endl; //若width是非静态成员,不合法

但并不是说绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道去找哪个对象。如果一定要引用本类中的非静态成员,应该加对象名和成员运算符”.”,如:

  1. cout<<a.width<<endl; //引用本类对象a的非静态成员

最好养成这样的习惯:只用静态成员函数引用静态数据成员,而不引用非静态数据成员。

二 实战

1 代码

  1. #include<iostream>
  2. using namespace std;
  3. class CStudent{
  4. public:
  5. CStudent (int n,int s):num(n),score(s){}//定义构造函数
  6. void total();
  7. static double average();
  8. private:
  9. int num;
  10. int score;
  11. static int count;
  12. static int sum;//这两个数据成员是所有对象共享的
  13. };
  14. int CStudent::count=0;//定义静态数据成员
  15. int CStudent::sum=0;
  16. void CStudent::total(){//定义非静态成员函数
  17. sum+=score; //非静态数据成员函数中可使用静态数据成员、非静态数据成员
  18. count++;
  19. }
  20. double CStudent::average(){//定义静态成员函数
  21. return sum*1.0/count;//可以直接引用静态数据成员,不用加类名
  22. }
  23. int main(){
  24. CStudent stu1(1,100);
  25. stu1.total();//调用对象的非静态成员函数
  26. CStudent stu2(2,98);
  27. stu2.total();
  28. CStudent stu3(3,99);
  29. stu3.total();
  30. cout<< CStudent::average()<<endl;//调用类的静态成员函数,输出99
  31. }

2 运行

  1. [root@localhost charpter02]# g++ 0213.cpp -o 0213
  2. [root@localhost charpter02]# ./0213
  3. 99

发表评论

表情:
评论列表 (有 0 条评论,481人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++——静态成员函数

    一 静态成员函数概念: 作用:在声明对象之前访问私有静态数据成员; 静态成员函数与类相关联。 静态成员函数只能访问静态成员(静态成员变量和静态成员函数); 若要在静态成

    相关 C++静态成员函数

    一 点睛 与静态数据成员不同,静态成员函数的作用不是为了对象之间的沟通,而是为了能处理静态数据成员。 静态成员函数没有this指针。既然它没有指向某一对象,也就无法对一个对