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/

posted @ 2011-03-22 15:04  浪里飞  阅读(1091)  评论(1编辑  收藏  举报