您的位置:首页 > 编程语言 > C语言/C++

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

2011-03-22 15:04 447 查看
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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: