码迷,mamicode.com
首页 > 其他好文 > 详细

static静态成员

时间:2015-11-01 16:27:16      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

一、静态数据成员

类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则。同时,静态数据成员还具有以下特点:

1.静态数据成员的初始化

  静态数据成员实际上是类域成员,在类内定义,类外初始化。类被可以定义常量静态变量,不能定义非常量静态变量。

 1 #include <iostream> 
 2 class S{
 3 public:
 4     static int static_i;//declare
 5     static const int const_static_i = 10; 
 6 private:
 7     
 8 };
 9 int S::static_i = 10;  //definition
10 
11 int main()
12 {
13     S s;
14     std::cout << ++S::static_i << std::endl;
15     std::cout << ++s.static_i << std::endl;
16     return 0;
17 }

2. .静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员

 1 #include <iostream> 
 2 class base{ 
 3 public : 
 4     static int _num;//declare 
 5 }; 
 6 int base::_num=0;//definition 
 7 
 8 class derived:public base{ 
 9 }; 
10 
11 int main() 
12 { 
13     base a; 
14     derived b; 
15     std::cout << ++a._num << std::endl; 
16     std::cout << ++b._num << std::endl;
17     return 0;
18 } 

 

3.静态成员可以成为成员函数的可选参数,而普通成员不可以。

 1 class base
 2 { 
 3 public: 
 4     void func2(void(*)()){}
 5     void func3()
 6     {
 7         func2(f1);
 8         func2(f2);
 9         //func2(f3); //错误
10     }
11 private:
12     static void (*f1)();
13     static void f2(){}
14     void f3(){}
15 }; 

 

4.静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为所属类类型的指针或引用

1 class base
2 { 
3 public: 
4    static base b1;
5    //base b2; //error
6    base* b3;
7    base& b4 = b1;
8 }; 

 

二、静态成员函数

1.静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存

1 class base{ 
2 static int func1(); 
3 int func2(); 
4 }; 
5 
6 int (*pf1)()=&base::func1;//普通的函数指针 
7 int (base::*pf2)()=&base::func2;//成员函数指针 

 

2..静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。

3.静态成员函数不可以同时声明为 virtual、const、volatile函数。举例如下

1 class base{ 
2 virtual static void func1();//错误 
3 static void func2() const;//错误 
4 static void func3() volatile;//错误 
5 }; 

static静态成员

标签:

原文地址:http://www.cnblogs.com/wxquare/p/4927720.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!