• C++之特殊函数成员


    目标:普通函数
    分类:

    void show();
    void put() const;	//const成员函数,只读成员函数
    static void hehe();	//今天成员函数
    inline void sss();	//内联成员函数
    
    • 1
    • 2
    • 3
    • 4

    1 const 成员函数

    只能读取数据成员,而不能修改中
    只能调用const成员函数,不能调用非const成员函数
    类对象也可以声明为const对象,一般来说,能作用于const对象和const对象引用的成员函数出了构造函数和析构函数,便只有const成员函数了,因为const对象只能被创建、撤销以及只读访问,改写是不允许的。同样的const对象的引用也只能调用const成员函数,以及构造函数和析构函数。

    Point a(3, 8);	//普通对象
    const Point b(3, 8); //const对象 不能调用b.show()这样的非const成员函数
    
    • 1
    • 2
    class Point
    {
        int x;
        int y;
        const int z = 10;
    public:
        Point(){}
        void setX(int a)
        {
        	x =a;
        }
        int getX() const //限定函数成员对数据成员的操作   只读
        {
        	//setX(11);	//不能调用setX,因为setX是设置数据成员的值
            return x;
        }
    
        int getZ() const //限定函数成员对数据成员的操作   只读
        {
        	int x = getX();	//可以调用
        	int m  = y; //可以这样用,因为是读操作
        	const int n = z; //可以这样用,因为是读操作
            return z;
        }
        void show()
        {
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    2 静态成员函数

    成员函数也可以定义成静态的,与静态成员变量一样,系统对每个类只建立一个函数实体,该函数体为该类的所有对象共享
    静态成员函数与普通成员函数都只有一个实体,被所有的对象共同使用
    普通成员函数,必须通过对象调用,通过this执政保存这个对象的地址,去访问这个对象的空间,既可以访问普通数据成员,也可以访问静态成员
    核心:静态成员函数,可以不通过对象就调用,也可以通过对象调用,只能访问静态成员(数据成员和函数成员)

    类提供了很多功能
    正常情况下,都是先船舰一个对象,然后让对象去调用对应的函数
    特殊情况下,可以不创建对象,直接调用静态成员函数,实现某些功能

    class Point
    {
        int x;
        int y;
        const int z = 10;
        static int m;
    public:
        Point(){}
        int getX() const //限定函数成员对数据成员的操作   只读
        {
            return x;
        }
    
        int getZ() const //限定函数成员对数据成员的操作   只读
        {
            return z;
        }
    
        static void put()
        {
            //int m = x; //错误,不能调用x
            int a = m;  //可以调用,m是static
        }
    };
    int Point::m = 1;
    int main()
    {
        Point::put();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    猿创征文|OLAP之apache pinot初体验
    Python:使用PyAV提取视频关键帧
    深入浅出Android同步屏障机制
    花了一天的时间,地板式扫盲了vue3中所有API盲点
    Linux命令(91)之mv
    python sqlalchemy(ORM)- 03 更新和查询
    使用Android辅助功能AccessibilityService实现微信自动聊天【外挂插件】
    Unity入门教程||创建项目(上)
    Mysql优化---锁机制、行锁及表锁
    价格监测难点2——全覆盖监测
  • 原文地址:https://blog.csdn.net/L1643319918/article/details/126109855