普通成员变量是对象各自独有的,不会相互之间影响,但是静态成员变量是共用的。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; }
时间: 2024-12-15 14:41:13