关于static关键词的用法

静态成员数据必须有确定的值,但是由于在类的定义中不能对成员数据直接进行初始化,故必须在类定义的外部对静态成员数据再一次声明,并进行初始化,此时,前面不需要加static关键字。
类的静态成员数据具有全局变量的某些特性。在程序开始运行时就为静态成员数据分配存储空间,但它只有类的作用域。也就是说在执行main()函数之前,首先对静态成员数据和全局变量分配存储空间并进行初始化,当整个程序结束时才撤销静态成员数据和全局变量。
静态成员函数也分为公有的、私有的、和受保护的。对于公有静态成员,可以通过类的对象进行访问,也可以通过类名直接访问(特殊之处)

定义静态成员函数时,在函数名前加static关键字即可,静态成员函数属于整个类,它是由该类的所有对象共享的成员函数。不属于某个对象。
静态成员函数不能像普通成员函数一样直接访问对象中的非静态成员,而只能访问所在类的静态成员、全局变量和外部函数等。

#include<iostream>
using namespace std;
class CTest
{

    public: 

    static int Add(int a,int b)
    {
        return a+b;
    }
    int Sub(int a,int b)
    {
        return a-b;
    }
    int Mul(int a,int b)
    {
        return a*b;
    }
    static int Div(int a,int b)
    {
        return a/b;
    }
    void ShowStaticVal()
    {
        cout<<"静态变量num1的值是:"<<num1<<endl; // 
        cout<<"静态变量num2的值是:"<<num2<<endl;

    }
    static void SetNum()
    {
        num1 = 11;
        num2 = 22;
    }
    static int num1;
    static int num2;

};
void TestStatic()
{
    cout<<"调用静态函数:"<<endl;
    cout<<"进行加法运算:"<<CTest::Add(10,20)<<endl;
    cout<<"进行除法运算:"<<CTest::Div(50,10)<<endl;
}
int CTest::num1 = 11;//**一定要在类外进行初始化**
int CTest::num2 = 22;
int main()
{
    TestStatic();
    cout<<CTest::num1<<endl; 
    cout<<CTest::num2<<endl; 
    cout<<"调用静态函数操作静态成员变量"<<endl;

    CTest t1;
    cout<<"减法运算:"<<t1.Sub(10,20)<<endl;
    cout<<"除法运算:"<<t1.Mul(50,10)<<endl;
    cout<<"尝试使用普通函数调用静态变量"<<endl;
    t1.ShowStaticVal();
    return 0; 
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38293125/article/details/80928169