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

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值