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

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

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

        函数体内容;

}

概念结束

先引入指针为例:

#include 

using namespace std;
void fun(int *p){
    cout << "接收普通指针的普通方法 " <

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

对于对象来说的话

#include 

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" <

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

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

#include 

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" <

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

你可能感兴趣的:(c++,开发语言)