#include<iostream>
using namespace std;
class Point
{
public:
Point(int x=0,int y=0):x(x),y(y)
{
count++;
}
Point(Point &p)
{
x=p.x;
y=p.y;
count++;
}
~Point(){ count--;}
int GetX(){ return x;}
int GetY(){ return y;}
static void showCount()
{
cout<<"object count="<<count<<endl;
// cout<<x<<endl; //静态成员函数不可访问非静态类的私有成员
} //error C2597: illegal reference to data member 'Point::x' in a static member function
void print()
{
cout<<x<<y<<count<<endl; //常成员函数可访问类中静态成员
}
private:
int x,y;
static int count;
};
int Point::count=0; //静态成员变量的申明只能在类外 类中定义报错
int main()
{
Point a(4,5);
cout<<"Point A:"<<a.GetX()<<","<<a.GetY();
// a.showCount(); //可通过对象访问静态成员函数
Point::showCount();
Point b(a);
cout<<"Point B:"<<b.GetX()<<","<<b.GetY();
Point::showCount();
b.print();
return 0;
}
1.静态函数与常量函数(这里只经过了vc6.0的测试通过)
对于静态函数只能访问类中的静态成员函数,而对于非静态成员则不能访问,类外可以通过类名而不是对象(测试中对象也可以调用)调用静态成员函数!
而对于非静态成员函数,在类中可以调用非静态私有成员,但是不能使用静态成员。
2.静态成员与非静态成员
静态成员的初始化不能在类的构造函数中,而需要在类外初始化,静态成员是属于整个类的。
补充: 关于const 在指针前后的区别
#include<iostream>
using namespace std;
int main(int argc,char* argv[])
{
int a=1,b=2;
const int *p;
int *const pc=&b; // must define in this line
p=&a;
// pc=&b;
//test p , a and *p
p=&b;
a=2;
//*p=b; rror C2166: l-value specifies const object
//test pc ,b and *pc
// pc=&a; error C2166: l-value specifies const object
*pc=b;
cout<<*p<<'\n'<<*pc<<endl;
return 0;
}