C++关键字之static

C++关键字之static

静态成员

静态成员的提出是为了解决数据共享的问题。实现数据共享有许多种方法,其中使用全局性的变量或对象是一种方法。但是全局性会带来一个问题:
不安全性——全局量在程序任何地方都可以更新而不加限定,无法控制范围。

静态成员包含静态数据成员和静态成员函数

static的作用

C++中的static的作用基本与C中static中一致。唯一的区别是C++中多了一个类域,所以C++对static进行了一方面的扩展:static修饰“类的成员”,正是有了这样的扩展,static才可以解决数据共享问题。

静态数据成员

此时static修饰的成员变量就变成了对该成员变量的声明而再不是定义!此时该成员叫做静态成员变量或静态数据成员。

  1. 静态数据成员的定义或说明时前面加关键字static
  2. 静态数据成员的初始化应该在类体外进行,格式如下:
    <数据类型> <类名>::<静态数据成员名>=<初值>;
  3. 静态数据成员被存放在静态数据区所以必须对它进行初始化
  4. 静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值,const修饰符等参数
  5. 所有对象共享一个static类成员变量
class Data{
public:
    Data(int _year = 0, int _month = 0, int _day = 0)
        :year(_year),
        month(_month),
        day(_day)
    {
        cout << "构造成功!-->"<<this<<endl;
    }
    ~Data()
    {
        cout << "析构成功!-->"<<this<<endl;
    }
    void print_data()
    {
        cout << this->year <<" " << this->month <<" "<< this->day <<" " <<this->minute <<endl;
    }
    static int minute;

private:
    int year;
    int month;
    int day;

};

int Data::minute = 0;
int main()
{
    Data data;
    data.print_data();
    cout << data.minute<<endl;
    cout << Data::minute<<endl;
    return 0;
}

static修饰类的成员函数

静态成员函数的实现中可以直接引用类中说明的静态成员,而不可以直接引用非静态成员。静态成员函数要引用非静态成员时,可以通过对象来引用(不能是this指针)。

class Data{
public:
    Data(int _year = 0, int _month = 0, int _day = 0)
        :year(_year),
        month(_month),
        day(_day)
    {
        cout << "构造成功!-->"<<this<<endl;
    }
    ~Data()
    {
        cout << "析构成功!-->"<<this<<endl;
    }
    static void count_day(Data &data)
    {
        cout << "year =  "<<data.year<<" minute = "<<data.minute<<endl;
    }
    void print_data()
    {
        cout << this->year <<" " << this->month <<" "<< this->day <<" " <<this->minute <<endl;
    }
    static int minute;

private:
    int year;
    int month;
    int day;

};

int Data::minute = 0;
int main()
{
    Data data;
    data.print_data();
    cout << data.minute<<endl;
    cout << Data::minute<<endl;
    data.count_day(data);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/NeverWA/article/details/80679260
今日推荐