zoukankan      html  css  js  c++  java
  • 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" (?z@Point@@0HA)
        //这说明类的静态成员变量不可以用构造函数初始化
    
        //类的静态成员初始化(错误示例)
        //int Point::z = 0;
        //报错  error C2655: “Point::z”: 当前范围内的定义或重新声明非法
        //首先:静态变量在Point类中是私有的  不让外部访问  
        //其次:静态变量已经在上面定义了  这里再次定义 属于重定义
    
        //打印静态成员变量的值
    
        //调用静态成员函数的方法1
        Point::Getnum();
    
        //调用静态成员函数的方法2
        Point p3(2, 2);
        p3.Setnum(11);
        Point::Getnum();
        p3.Getnum();
    
    }
    
    void main(){
        ProtectA();
        system("pause");
    }
  • 相关阅读:
    你会做夹具吗?(一)
    DDR3布线设计要点总结
    PCB设计要点-DDR3布局布线技巧及注意事项
    走进JEDEC,解读DDR(下)
    [转]关于STM32 PB3 PB4 如何设置成普通GPIO的配置
    [转]Verilog有符号数与无符号数作运算
    [转]实用光电二极管pd的采样电路
    STM32外部8M晶振不启动
    ALTCLKCTRL核的作用
    [转]如何在Altium Designer中将PCB生成PDF?
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5610149.html
Copyright © 2011-2022 走看看