静态成员变量和静态成员函数

普通成员变量是对象各自独有的,不会相互之间影响,但是静态成员变量是共用的。sizeof不会把静态成员变量计算进去。

普通成员函数必须具体作用于某个对象,而静态成员函数不具体作用于某个具体对象。静态成员访问时和普通成员访问相比多了一种即通过类名进行访问。

静态成员变量和函数本质上是全局变量和函数。我们在使用时,应该在类外面进行初始化或者说明,否则编译能通过,但是链接不能通过。

在静态成员函数中不能访问非静态成员变量和非静态成员函数。因为静态成员函数不作用于具体的对象上。

在使用静态成员变量和函数时会存在安全隐患,因为不是所有的对象在创建时都是通过构造函数进行创建的,还可以通过复制构造函数进行创建,这样就会导致程序出现错误。解决办法就是重写复制构造函数,保证程序运行正确。

#include <iostream>
 
using namespace std;
 
class Crectangle
{
private:
    int width, length;
    static int NumTotal;
    static int TotalSize;
public:
    Crectangle(int w, int l)
    {
        width = w;
        length = l;
        NumTotal += 1;
        TotalSize += w*l;
    }
    Crectangle(Crectangle & c)
    {
        width = c.width;
        length = c.length;
        NumTotal += 1;
        TotalSize += w*l;
    }
    static void print(void)
    {
        cout << NumTotal << endl;
        cout << TotalSize << endl;
    }
    ~Crectangle()
    {
        NumTotal -= 1;
        TotalSize -= width*length;
    }
};
int Crectangle::TotalSize = 0;
int Crectangle::NumTotal = 0;
int main()
{
    Crectangle rec1(3, 4), rec2(4, 9);
    Crectangle::print();
    return 0;
}

 参考链接:

https://www.coursera.org/learn/cpp-chengxu-sheji

原文地址:https://www.cnblogs.com/helloforworld/p/5652814.html