16、C++ Primer 4th 笔记,static(静态)类成员

1static成员函数没有this形参,它可以直接访问所属类的static成员,但不能直接使用非static成员。

2、可以通过作用域操作符,对象,引用,指针来调用static成员。

3、在类外给static成员数据赋值,或定义成员函数时不必要再指定static

4、因为 static 成员不是任何对象的组成部分,所以 static 成员函数不能被声明为 const。毕竟,将成员函数声明为 const 就是承诺不会修改该函数所属的对象;也不能声明为虚函数。

保证对象正好定义一次的最好办法,就是将 static 数据成员的定义放在包含类非内联成员函数定义的文件中。

5、整型const static数据成员就可以在类的定义体中进行初始化。const static数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体之外进行定义。

6static成员不是类对象的组合部分,属于类;但是由给定类的全体对象所共享。static 数据成员的类型可以是该成员所属的类类型。非 static 成员被限定声明为其自身类对象的指针或引用。

7、每个标号为在该标号到下一个标号之间声明的成员设置访问保护。标号可以在类中出现多次。

8const member function(常量成员函数),一种成员函数,不能改变对象的普通(即,既不是 static 也不是mutable)数据成员。const 成员中的 this 指针指向 const 对象。成员函数是否可以被重载取决于该函数是否为 const

#include <iostream>

using namespace std;

class TestStatic

{

public:

	TestStatic()

	{

		cout << "In TestStatic" << endl;

	}

	static void output()

	{

		cout << "For a Test" << endl;

		cout << period << endl;

	}

	void output1() const

	{

		cout << "In output1" << endl;

	}

	void output1()

	{

		cout << "In output1" << endl;

	}

	static int testme;

	static const int period = 30;

	static TestStatic mem1;

	//TestStatic mem2; //error

	TestStatic* mem3;

};

//const int TestStatic::period;

int TestStatic::testme = 10;

class TestStatic1: public TestStatic

{

public:

	TestStatic1()

	{

		cout << "In TestStatic1" << endl;

	}

};

int main()

{

	TestStatic t1;

	cout << TestStatic::testme << endl;

	cout << t1.testme << endl;

	t1.output();

	TestStatic1 t2;

	cout << t2.testme << endl;

	t2.output();

	return 1;

}

 9、通过公有的静态成员函数访问私有静态数据成员。

参考

[1] http://blog.163.com/zhoumhan_0351/blog/static/39954227201002621251123/

[2] http://blog.163.com/zhoumhan_0351/blog/static/3995422720103179552945/

你可能感兴趣的:(static)