自学内容网 自学内容网

C++ static关键字

static可以修饰变量和函数,称为静态成员

static可以将修饰的局部变量生命周期延长到整个程序执行

静态成员变量:
所有对象共享一份数据,其在编译阶段分配内存(全局区),在类内声明在类外初始化

class Person {

public :

        static int m_A;//类内声明

};

int Person::m_A =10000;//类外初始化

void test(){

        Person p;

        cout <<p.m_A <<endl; // 10000

        Person p2;

        p2.m_A = 200;

        cout <<p.m_A <<endl; // 200; //该数据共享,由实例更改,其他实例下的该静态成员变量一样更改,所有对象都共享同一份数据 

}

同时:静态成员变量也有访问权限,如果是private ,类内可以访问,类外不可

静态成员函数:

静态成员函数只能访问静态成员变量,因为无法区分该非静态成员变量属于哪个对象

同时其所有对象共享同一个静态成员函数,导致其可以不用创建对象来访问:
Person :: func ();   //func是静态成员函数,不需要创建对象

同样的,类外无法访问私有静态成员函数


 

int * add(int a ,int b )

{

        static int sum ;  //sum将一直存在直到程序结束

        sum  = a +b ;

        return sum;

}

int main(){

        int * out = add(1,2);

        cout <<* out <<endl;

        return 0;

}

函数返回一个数组:(本质还是返回指针)

写法1 :
int * fun2(){

static int arr[ ] ={1,2,3,4};

return arr;

}

写法2:

int * fun1 (){

        int * arr = new int [3]{ 1,2,3,4};

        return arr; //arr为指针

}

不推荐函数返回数组,因为要么手动delete、要么static一直占内存、要么全局变量。推荐在函数外创建好数组,传入函数(地址传递或引用传递)进行操作即可。


原文地址:https://blog.csdn.net/qq_51365682/article/details/142645032

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!