C++20——静态对象&静态成员

本文探讨了C++中静态成员变量的声明与初始化规则,包括在类内不能初始化静态成员变量的原因,以及如何在类外正确地进行静态成员变量的初始化。同时,介绍了静态成员函数的使用限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void f(){
    static int num_calls=0;
    ...
    num_calls++;
}
class X{
    X(int,int);
    ~X();
};
void f(){
    static X my_X(10,20);//变量只做一次初始化
}

 类里不能对静态成员做初始化,只能对非静态成员做初始化。

class A{
public:
    //A():i(0){ } 这句会报错,不能对静态成员做初始化
    A(){ i=0; }
    void print(){ cout<<i<<endl; }
    //void set(int ii){i=ii;}
    void set(int i){this->i=i;}正确
    static void say(int ii){ cout<<ii<<this->i<<endl;}
    //static void say(int ii){ cout<<ii<<k<<endl;}错误,静态函数只能调用静态成员变量,而k是非静态的
private:
    int k;
    static int i;//声明
};
int A::i=20;//定义,但是由于类里存在i=0 实际上本句的20不会被初始化
//static int A::i=20;报错,因为这样写表示只有本页可以使用i,但实际上,其他地方页可以使用
int main(){
    A a,b;
    a.set(10);
    b.print();
    
    a.say(0);
    A::say(0);//调用静态成员函数
    
    return 0;
}
class A{
public:
    //A():i(0){ } 这句会报错,不能对静态成员做初始化
    A(){ i=0; }
    void print(){ cout<<i<<endl; }
	void set(int i){this->i=i;}正确
    static int i;//声明
};
int A::i=20;//定义,但是由于类里存在i=0 实际上本句的20不会被初始化

int main(){
    A a,b;
    a.set(10);
    b.print();
    
    cout<<a.i<<endl;
    cout<<A::i<<endl;//直接访问静态成员(变量)
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值