c++中关键字static在class类变量及函数详解及实例运行答案

例1 关键字static在类中做静态数据成员与静态局部变量类似

#include<iostream>

using namespace std;

class sumClass
{
private:
    int a;
    int b;
    static int sum;//声明静态数据成员
public:
    void sumfunc(int a,int b);
    void sumOutput();
};

int sumClass::sum=0;//不同于普通变量,static变量只能在类外定义

void sumClass::sumfunc(int a, int b)
{
    sum+=(a+b);
}

void sumClass::sumOutput()
{
    cout<<"sum="<<sum<<endl;
}

int main()
{
    sumClass s1,s2;
    cout<<"s1的和值为:";
    s1.sumfunc(1,2);
    s1.sumOutput();
    cout<<"s2的和值为:";
    s2.sumfunc(10,20);
    s2.sumOutput();
    cout<<"s1的和值为:";
    s1.sumOutput();

    return 0;
}

运行结果

可用看到s2的和值不是30了,而是33(上次的和3加上这次的30),同样的是s1的和变为了33


例2 在与不带static的做一下比较

#include<iostream>

using namespace std;

class sumClass
{
private:
    int a;
    int b;
    //static int sum;//声明静态数据成员
    int sum=0;
public:
    void sumfunc(int a,int b);
    void sumOutput();
};

//int sumClass::sum=0;//不同于普通变量,static变量只能在类外定义

void sumClass::sumfunc(int a, int b)
{
    sum+=(a+b);
}

void sumClass::sumOutput()
{
    cout<<"sum="<<sum<<endl;
}

int main()
{
    sumClass s1,s2;
    cout<<"s1的和值为:";
    s1.sumfunc(1,2);
    s1.sumOutput();
    cout<<"s2的和值为:";
    s2.sumfunc(10,20);
    s2.sumOutput();
    cout<<"s1的和值为:";
    s1.sumOutput();

    return 0;
}

运行结果



例3 做静态成员函数

它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其余的静态成员函数

#include<iostream>

using namespace std;

class sumClass
{
private:
    int a;
    int b;
    int sum=0;
public:
    static void sumfunc(int a,int b);
    void sumOutput();
};

//int sumClass::sum=0;//不同于普通变量,static变量只能在类外定义

void sumClass::sumfunc(int a, int b)
{
    sum+=(a+b);
}

void sumClass::sumOutput()
{
    cout<<"sum="<<sum<<endl;
}

int main()
{
    sumClass s1,s2;
    cout<<"s1的和值为:";
    s1.sumfunc(1,2);
    s1.sumOutput();
    cout<<"s2的和值为:";
    s2.sumfunc(10,20);
    s2.sumOutput();
    cout<<"s1的和值为:";
    s1.sumOutput();

    return 0;
}

运行结果出错


因为sum是非静态成员,所以出错


例4 调用静态成员

#include<iostream>

using namespace std;

class sumClass
{
private:
    int a;
    int b;
    static int sum;//声明静态数据成员
public:
    static void sumfunc(int a,int b);
    void sumOutput();
};

int sumClass::sum=0;//不同于普通变量,static变量只能在类外定义

void sumClass::sumfunc(int a, int b)
{
    sum+=(a+b);
}

void sumClass::sumOutput()
{
    cout<<"sum="<<sum<<endl;
}

int main()
{
    sumClass s1,s2;
    cout<<"s1的和值为:";
    s1.sumfunc(1,2);
    s1.sumOutput();
    cout<<"s2的和值为:";
    s2.sumfunc(10,20);
    s2.sumOutput();
    cout<<"s1的和值为:";
    s1.sumOutput();

    return 0;
}

运行结果



因为sum是静态成员,所以可用调用











评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值