关于常对象为什么只能调用常成员函数

什么是常对象,就是加了一个const就是的对象;常成员函数 表示该成员函数不能修改数据成员的值。格式:

返回值类型 函数名(形参列表) const {

函数体内容;

}

概念结束

先引入指针为例:

cpp 复制代码
#include <iostream>

using namespace std;
void fun(int *p){
    cout << "接收普通指针的普通方法 " <<endl;
}
void const_fun(const int *p){
    cout << "接收常量指针的普通方法 " <<endl;
}
int main()
{
    int a=10;
    int *p1=&a;
    const int *p2=&a;
    fun(p1);
    //fun(p2);//error: invalid conversion from 'const int*' to 'int*' [-fpermissive]
    const_fun(p1);
    const_fun(p2);
    return 0;
}

const类型的指针无法转化为普通指针,普通指针可以转化为const类型的指针

对于对象来说的话

cpp 复制代码
#include <iostream>

using namespace std;

class Person {
private:
    string name;
    int age;
public:
    Person(){}
    Person(string name,int age):name(name),age(age){}
    void show(){
        cout << "i am person" <<endl;
    }
};

int main() {

    const Person p1("张三",18);
    p1.show();//error: passing 'const Person' as 'this' argument discards qualifiers

    return 0;
}

常对象无法调用非常成员函数,以上代码会报错

我们应该知道,在一个非静态成员函数中存在一个隐藏的this指针,如果这个this指针的类型不同也会构成函数的重载,就相当于新建对象去找另外一个成员函数的方法了,而这肯定是不存在的

cpp 复制代码
#include <iostream>

using namespace std;

class Person {
private:
    string name;
    int age;
public:
    Person(){}
    Person(string name,int age):name(name),age(age){}
    void show(){
        cout << "i am person" <<endl;
    }
    void show()const{
        cout << "i am person" <<endl;
    }
};

int main() {

    const Person p1("张三",18);
    p1.show();
    return 0;
}

这样写不会报错,函数也没有被重复定义

相关推荐
xingpanvip12 分钟前
星盘接口开发文档:星相日历接口指南
android·开发语言·前端·css·php·lua
guygg8820 分钟前
基于遗传算法的双层规划模型求解MATLAB实现
开发语言·matlab
凯瑟琳.奥古斯特39 分钟前
SQLAlchemy核心功能解析
开发语言·python·flask
卷Java1 小时前
GPTQ vs AWQ vs GGUF:模型量化工具横向测评
开发语言·windows·python
极客智造1 小时前
C++ 标准 IO 流全详解:cin /cout/get /getline 原理、用法、区别与避坑
c++·io
charlie1145141911 小时前
嵌入式C++工程实践第20篇:GPIO 输入模式内部电路 —— 芯片是如何“听“到外部信号的
开发语言·c++·stm32·单片机
xinhuanjieyi2 小时前
极语言让ai学习的方法
开发语言·学习
xiaogutou11212 小时前
2026年历史课件PPT模板选购指南:教师备课效率与精度的平衡方案
开发语言·c#
StockTV2 小时前
印度股票实时数据 NSE和BSE的实时行情、K 线及指数数据
java·开发语言·spring boot·python
chaofan9802 小时前
GPT-5.5 领衔 Image 2.0:像素级控制时代,AI 绘图告别开盲盒
开发语言·人工智能·python·gpt·自动化·api