C++ 静态数据成员使用易错点

先看代码

#include <iostream>  
#include <conio.h>  
using namespace std;  
class test  
{  
public:  
	static int i;  //(1)
	static const int count = 1; // 静态常量成员可以在类内初始化//(2)
	test() {}  
	void print();  
private:  
	static int j; 
};  

int test::i = 2;  //(1)
int test::j = 3;  

void test::print()  
{  
	cout << "i = "<< i << endl; 
	cout << "j = "<< j << endl;
}  

int main()  
{  
	test t;  
	t.print();  

	cout << "i = "<< t.i << endl;//(3)
	//cout << "j = "<< t.j << endl;//测试是否可以不受private作用   (4)
	return 0;  
}  

输出:



程序运行成功,从注释中的(1)~(4)标记的位置可以看到,静态数据成员在使用时有一下一些特点。

1、类的静态成员(static member)必须在类内声明,在类外初始化因为静态成员属于整个类,而不属于某个对象。标记(1)。

2、类的静态成员可以直接被类名调用。i的初始化语句说明了这点,同时注意类外初始化不再需要static关键字。标记(1)。

3、静态常量成员可以在类内初始化。静态常量数据成员可以在类内初始化(即类内声明的同时初始化),也可以在类外,即类的实现文件中初始化,不能在构造函数中初始化,也不能在构造函数的初始化列表中初始化。标记(2)。

4、静态数据成员可以被类对象调用。尽管静态数据成员不属于某个对象。标记(3)。

5、静态数据成员能受private控制符的作用。静态数据成员是可以为private类型的,能受private控制,但是private类型的静态数据只能被类成员函数访问,类外对象不能直接调用,因为对象不能调用类的私有类型。main函数里被注释掉的cout语句不能编译通过。标记(4)。


猜你喜欢

转载自blog.csdn.net/fuhuixin7497/article/details/78171672