C++的static静态函数

来源:互联网 发布:装修风格效果图软件 编辑:程序博客网 时间:2024/06/05 12:49


静态成员函数中没有this指针


#include <iostream>using namespace std;int y;  //全局区的变量 在哪里都可以访问/*** C中的使用方式 ****///1.限制只能在本文件中访问static int x;//2.函数中的static变量,不受函数的生命周期影响,程序开始时候创建,程序结束时候销毁void test(){    static int s;}/* ** C++中的使用方式  ** */class Example{public:    int a;    //static修饰的变量,属于类,但是所有对象共享它,也就是说通过这个类创建的对象都可以访问它。换而言之,假如创建了10个对象,如果其中一个对象修改了这个变量的值,那么其他9个对象访问这个变量的值也都变了    static int x;#pragma 那么问题来了,这个x变量创建出来,x内存到底在哪??        void show(){        this-> a = 100;        x = 900; //非静态函数中可以访问静态变量 和静态函数        show2();        cout << "a = " << a << endl;    }            //这个函数是属于类的,调用它的时候是通过类名调用的。        static void show2(){//因为是类名调用,所以并没有传进对象       // this -> a = 200;//不能在这个函数里面修改成员变量        //静态成员函数中没有this指针        //静态方法中不能使用非静态的成员变量                x = 800;               //this-> show();//静态函数中不能访问非静态函数            }    };//类中的static变量,我们必须在静态区手动为他分配空间//变量类型  类名:: 变量名int Example:: x; //也可以直接初始化//主函数int main(int argc, const char * argv[]){    //    Example ex1;    ex1.a = 100;    ex1.x = 200;        Example ex2;    ex2.a = 300;    ex2.x = 400;        cout << "ex1.a = " << ex1.a << endl;    cout << "ex2.a = " << ex2.a << endl;    cout << "ex1.x = " << ex1.x << endl;    cout << "ex2.x = " << ex2.x << endl;        //一般不建议用对象直接调用static的变量,而是通过类名。对象调用不报错是因为编译器帮忙通过对象找到类型调用的    cout << "通过类名调用 " << Example::x << endl;            ex1.show();//对象调用成员函数会隐式的把对象本身传进去,在函数参数那里会有this指针来接收    Example::show2();        return 0;}



0 0