C++ 类中的静态成员变量,静态成员函数

Posted 庖丁解牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 类中的静态成员变量,静态成员函数相关的知识,希望对你有一定的参考价值。

//类中的静态成员变量,静态成员函数
#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");
}

 

以上是关于C++ 类中的静态成员变量,静态成员函数的主要内容,如果未能解决你的问题,请参考以下文章

C++类中的静态成员函数以及静态成员变量

C++类中的静态成员函数以及静态成员变量

C++类中的常成员和静态成员

c++中静态成员变量和静态成员函数(笔试经历)

c++类中 各种成员的生命周期?

C++中类里面定义 静态成员变量的问题