转自:http://bbs.csdn.net/topics/390183594

在头文件中定以后,应在类的生命之外,重新定义一次。

 

 1 class A  
 2 {
 3 public:
 4 void print()
 5 {
 6 cout<<"a = "<<a<<'\n'<<"b = "<<b<<endl;
 7 cout<<"str = "<<str<<endl;
 8 cout<<"de = "<<de<<endl;
 9 }
10 A():a(0),b(0){}
11 A(int c, double d )
12 {
13   a = c;
14 b = d;
15 }
16 static int sta;
17 private:
18 int a;
19 double b;
20 int de;
21  
22 string str;
23 };
24 <span style="color: #FF0000;">int A::sta = 999;</span>
25 int _tmain(int argc, _TCHAR* argv[])
26 {
27  
28 A a;
29 a.print();
30 cout<< A::sta<<endl;
31 return 0;
32 }

 

// static_test.h : 头文件  

002 #pragma once  

003    

004 class static_test  

005 {  

006 public:  

007     static_test();//默认构造函数  

008     void set(int x, int y, int z);//成员变量初始化  

009     int add();//  

010     static int add2();//静态成员函数  

011     ~static_test();  

012     static int sum;//公有的静态成员变量  

013 private:  

014     static int sum2;//私有的静态成员变量  

015     int a, b, c;  

016 };  

017    

018    

019 // static_test.cpp : 定义控制台应用程序的入口点。  

020 //  

021    

022 #include "stdafx.h"  

023 #include "static_test.h"  

024 #include <iostream>  

025 using namespace std;  

026    

027 /*  

028 notice:  

029    如果sum,sum2这两个静态成员变量没有在这里定义,就会出现错误:  

030    static_test.obj : error LNK2001: 无法解析的外部符号 "private: static int static_test::sum2"   

031    static_test.obj : error LNK2001: 无法解析的外部符号 "public: static int static_test::sum"   

032 */ 

033 int static_test::sum = 0; //  

034 int static_test::sum2 = 0; //   

035    

036 /*  

037   全局函数可以调用类的public型的静态成员变量sum,可以改变它的值。  

038   但不能用sum2,因为sum2是private类型的。  

039 */ 

040 int fun_add(int x, int y, int z)  

041 {  

042     static_test::sum += x+y+z;  

043     return static_test::sum;  

044 }  

045    

046 /*  

047 成员变量的初始化  

048 */ 

049 static_test::static_test()  

050 {  

051     this->a = 0;  

052     this->b = 0;  

053     this->c = 0;  

054 }  

055    

056 /*  

057 给成员变量赋值  

058 */ 

059 void static_test::set(int x, int y, int z)  

060 {  

061     a = x;  

062     b = y;  

063     c = z;  

064 }  

065    

066 /*  

067 析构函数  

068 */ 

069 static_test::~static_test(void)  

070 {  

071 }  

072    

073 /*  

074 成员函数的实现  

075 */ 

076 int static_test::add()  

077 {  

078     return a+b+c;  

079 }  

080    

081 /*  

082 静态成员函数的实现  

083 注意:静态成员函数只能访问类的静态成员变量。  

084 定义时,前面不能加static,否则出现error C2724: “static_test::add2”: “static”不应在文件范围内定义的成员函数上使用错误:  

085 */ 

086 int static_test::add2()  

087 {  

088     return sum2;  

089 }  

090    

091 int _tmain(int argc, _TCHAR* argv[])  

092 {  

093     int result = 0;  //保存结果  

094     static_test test;//创建一个对象  

095     test.set(1, 2, 3);  

096     result = test.add();  

097     cout<<result<<endl;//result = 6  

098     result = fun_add(4, 5, 6);  

099     cout<<result<<endl;//result = 15  

100     result = fun_add(1, 2, 3);  

101     cout<<result<<endl;//result = 21    因为sum为静态成员变量,该变量的值可以保存给下一次调用,而不会冲掉,直到程序结束为止。  

102     return 0;  

103 } 
posted on 2016-07-15 11:25  zhang123shuo  阅读(11411)  评论(0编辑  收藏  举报