首页 > 代码库 > c++,静态成员函数

c++,静态成员函数

1. 静态成员函数不能引用非静态成员。

2. static成员函数中不能访问普通的成员,但是可通过 类名::成员 访问静态成员。

3. 普通的成员函数中可以访问静态成员。

4.普通的外部函数可以访问静态成员。

 

#include <iostream>using namespace std ;#include <string>//---------------------------------------------------------------class Demo{//模拟一个人public:    int m_age ;    char m_name[10] ;    static int m_country;    Demo(char* s , int age,int country);//构造函数    static void show(void); //介绍自己         void presence(void); //介绍自己    };Demo::Demo(char* s ,int age ,int country=111){    strcpy(this->m_name , s);    this->m_age = age ;    this->m_country = country;}//---------------------------------------------------------------int Demo::m_country = 111;//chinavoid Demo::show(){    //cout<<"name:"<<m_name<<endl;//error C2597: 对非静态成员“Demo::m_name”的非法引用    //cout<<"age:"<<m_age<<endl;//error C2597: 对非静态成员“Demo::m_age”的非法引用        //cout<<"country:"<<this->m_country<<endl;//error C2355: “this”: 只能在非静态成员函数的内部引用    //cout<<"country:"<<m_country<<endl;//ok 可以访问静态成员    cout<<"country:"<<Demo::m_country<<endl;//ok 可以访问类名::静态成员}void Demo::presence(){    cout<<"name:"<<m_name<<endl;    cout<<"age:"<<m_age<<endl;    cout<<"country:"<<m_country<<endl;//ok    //cout<<"country:"<<this->m_country<<endl;//ok    //cout<<"country:"<<Demo::m_country<<endl;//ok}//----------------------------------------------------------------int main(){    Demo demo1("caicai"  , 18 , 112);    demo1.show();    Demo demo2("benben",16);    demo2.show();    demo2.presence();//Demo::m_country是该类对象公有的【地址空间、值】,如本例中demo1、demo2共用。//外部函数main可以直接访问静态成员Demo::m_country。    cout<<"静态成员变量 Demo::m_country="<<Demo::m_country<<endl;    cout<<"静态成员变量 demo1.m_country="<<demo1.m_country<<endl;    cout<<"静态成员变量 demo2.m_country="<<demo2.m_country<<endl;    while(1);}/*country:112  //demo1.show();country:111  //demo2.show();name:benben //demo2.presence();age:16country:111*/

 

c++,静态成员函数