#include<fstream>
using namespace std;
class Widget
{
public:
Widget()
{
++count;
}
~Widget()
{
--count;
}
int numWidgets()
{
return count;
}
int* Widgets()
{
return &count;
}
private:
static int count;
};
int Widget::count = 0;
int main()
{
ofstream fout("result.txt");
Widget w, x;
fout << &w << " " << &x << endl;
fout << w.Widgets() << " " << x.Widgets() << endl;
fout << "Now there are " << w.numWidgets() << " Widgets \n";
{
Widget w, x, y, z;
fout << "Now there are " << w.numWidgets() << " Widgets \n";
}
Widget y;
fout << "Now there are " << w.numWidgets() << " Widgets \n";
return 0;
}
对象public是属于类的。该类的每个对象共用一个副本。
private是属于私有的,是属于对象的,是标志对象独立和存在的属性。
所以对对象取地址,得到的是private的地址。
但是对每个对象取public变量或函数的地址,都是相同的。
对象的虚函数地址,或者跟继承有关的,指针出现在对象私有第一个属性之前的地址。
0x241fecf 0x241febf
0x416008 0x416008
Now there are 2 Widgets
Now there are 6 Widgets
Now there are 3 Widgets