C++类的静态数据成员和静态成员函数


本文摘自网络,作者php是最好的语言,侵删。

静态数据成员

?用关键字static声明

?当声明类的数据成员为静态时,无论创建多少个类的对象,静态成员都只有一个副本

?在类的所有对象中共享,具有静态生存期

?若不存在其他的初始化语句,在创建第一个对象时,所有的静态数据成员被初始化为零

?在类外定义和初始化,用范围解析运算符(::)来指明所属的类

举例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#include <iostream>

using namespace std;

 

class Box {

public:

    static int count;    //若该静态数据成员在private部分声明,则只能通过静态成员函数处理

    Box(double l = 2.0, double b = 2.0, double h = 2.0) {

        cout << "One constructor was called." << endl;

        length = l, width = b, height = h;

        count++;    //每创建一个对象时加1

    }

    double Volume() {

        return length * width * height;

    }

    ~Box() { count--; }

private:

    double length, width, height;

};

//初始化类Box的静态成员

int Box::count = 0;

 

int main(void) {

    Box Box1(3.3, 1.2, 1.5);

    Box Box2(8.5, 6.0, 2.0);

    cout << "Total objects: " << Box::count << endl;  //输出对象的总数

    return 0;

}

静态成员函数

把成员函数声明为静态的,就可以把函数与类的任何特定对象独立开来

?在类对象不存在的情况下也能被调用,使用类名加范围解析运算符 :: 即可访问

?静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数

?静态成员函数有一个类范围,不能访问类的 this 指针,可以使用静态成员函数来判断类的某些对象是否已被创建

?用静态成员函数访问非静态成员,需通过对象

举例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

#include <iostream>

using namespace std;

 

class Box {

public:

    static int count;

    Box(double l = 2.0, double b = 2.0, double h = 2.0) {

        cout <<"One constructor was called." << endl;

        length = l, width = b, height = h;

        count++;

    }

    double Volume() {

        return length * width * height;

    }

    static int getCount() { //静态成员函数

        return count;

    }

private:

    double length, width, height;

};

int Box::count = 0;

 

int main(void) {

    //在创建对象之前输出对象的总数

    cout << "Inital Stage Count: " << Box::getCount() << endl;

     

    Box Box1(3.3, 1.2, 1.5);

    Box Box2(8.5, 6.0, 2.0);

     

    //在创建对象之后输出对象的总数

    cout << "Final Stage Count: " << Box::getCount() << endl;

    return 0;

}

注:

阅读剩余部分

相关阅读 >>

从事c/c++开发多年,给零基础想学习c/c++的几点建议

精选的这19道c/c+面试题,你能答对多少呢? - 个人文章 思否

c++ 判断本机是否有.net环境

c ++中accessor函数的特征

c语言 三种求回文数的算法

c语言比较三个数大小

c语言中for语句的执行过程是什么?

c语言的代码是什么?

“->” 在 c 语言什么意思?

c/c++函数如何返回多个值?(代码示例)

更多相关阅读请进入《c》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...