//类中的静态成员变量,静态成员函数 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* 静态成员函数是属于整个类, static修饰的变量,是属于类,,所有的对象都能共享用。 在类的静态数据成员函数中,是不能调用具体的对象的变量的属性, 这是因为static修饰的变量是整个类共享,在静态成员函数中使用一个对象的成员属性 c++编译器无法知道这个成员属性是哪个对象的 所以在静态成员函数中只能使用静态成员变量 */ class Point{ public: Point(int _x,int _y){ cout << "自定义的有参构造函数被调用了1" << endl; x = _x; y = _y; } Point(Point &pm){ cout << "我是自定义拷贝构造函数!" << endl; } ~Point(){ cout << "自定义的析构函数被调用了3" << endl; } static void Getnum(){ cout << z << endl; } static void Setnum(int c){ z = c; } private: int x; int y; //静态成员变量 static int z; }; //类的静态成员初始化(正确示例) int Point::z = 10; void ProtectA(){ //Point p1(); //警告 warning C4930: “Point p1(void)”: 未调用原型函数(是否是有意用变量定义的?) //分析:通过观察发现这行代码c++编译根本不会执行,要调用无参构造函数 Point p1;这样就可以 //调用拷贝构造函数 应该使用 Point p1(p2); //Point p2(1,1,2); //报错 error LNK2001: 无法解析的外部符号 "private: static int Point::z" ([email protected]@@0HA) //这说明类的静态成员变量不可以用构造函数初始化 //类的静态成员初始化(错误示例) //int Point::z = 0; //报错 error C2655: “Point::z”: 当前范围内的定义或重新声明非法 //在函数内初始化类的静态成员,会被认为是在定义一个类的成员变量 //打印静态成员变量的值 //调用静态成员函数的方法1 Point::Getnum(); //调用静态成员函数的方法2 Point p3(2,2); p3.Setnum(11); Point::Getnum(); p3.Getnum(); } void main(){ ProtectA(); system("pause"); }
时间: 2024-10-01 08:04:35