• 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
  • 相关阅读:
    人工智能轨道交通行业周刊-第60期(2023.9.11-9.17)
    每天一个设计模式之桥接模式
    阿里云服务 安装 Docker
    【第51篇】用于交通预测的时空交互动态图卷积网络
    thinkphp6 入门(4)--数据库操作 增删改查
    Python入门自学进阶-Web框架——25、DjangoAdmin项目应用-分页与过滤
    基于深度学习的航空发动机剩余寿命预测
    Open vSwitch系列之数据结构解析深入分析ofpbuf
    【英雄哥七月集训】第 19天:二叉树
    自己动手从零写桌面操作系统GrapeOS系列教程——12.QEMU+GDB调试
  • 原文地址:https://blog.csdn.net/L1643319918/article/details/126109855