一、直接上代码
#include <iostream>
using namespace std;
class A {
public:
A() {
++_scount;
}
A(const A& t) {
++_scount;
}
static int GetACount() {
return _scount;
}
private:
static int _scount;
};
int A::_scount = 0;
void TestA(){
cout << A::GetACount() << endl;
A a1, a2;
A a3(a1);
cout << A::GetACount() << endl;
}
int main() {
TestA();
system("pause");
return 0;
}
二、代码解读(补充)
1.静态成员变量
a.在类中定义 在类外赋初值
赋值时不加static 用 "类型 类名::变量名 = n"直接赋值
如上述代码: int A::_scount = 0;
b.静态成员跟类走不跟对象走,类在他在,而一般成员是对象在他才在,所以静态成员可以通过类名直接调用,而普通成员必须通过对象调用
c.静态成员变量所有对象共享 无论谁修改了 所有人都变了
d.存储在全局区,不占用类的空间,所以取sizeof的时候不算在内
2.void Test A()解读
a.首先输出目前创建了多少个对象 显而易见 目前没有创建 所以 输出 0
b.接着创建了 a1,a2两个对象
这两个对象调用了默认构造函数即
A() {
++_scount;
}
c.再然后创建了一个a3对象 a3拷贝a1
这里调用了拷贝构造函数即
A(const A& t) {
++_scount;
}
所以最后输出创建了多少个对象 结果为3