16、C++ Primer 4th 笔记,static(静态)类成员
1、static成员函数没有this形参,它可以直接访问所属类的static成员,但不能直接使用非static成员。
2、可以通过作用域操作符,对象,引用,指针来调用static成员。
3、在类外给static成员数据赋值,或定义成员函数时不必要再指定static。
4、因为 static 成员不是任何对象的组成部分,所以 static 成员函数不能被声明为 const。毕竟,将成员函数声明为 const 就是承诺不会修改该函数所属的对象;也不能声明为虚函数。
保证对象正好定义一次的最好办法,就是将 static 数据成员的定义放在包含类非内联成员函数定义的文件中。
5、整型const static数据成员就可以在类的定义体中进行初始化。const static数据成员在类的定义体中初始化时,该数据成员仍必须在类的定义体之外进行定义。
6、static成员不是类对象的组合部分,属于类;但是由给定类的全体对象所共享。static 数据成员的类型可以是该成员所属的类类型。非 static 成员被限定声明为其自身类对象的指针或引用。
7、每个标号为在该标号到下一个标号之间声明的成员设置访问保护。标号可以在类中出现多次。
8、const 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/