C++之const对象只能调用const成员函数---补充(18)《More Effective C++》

3 篇文章 0 订阅

C++中,const对象只能调用const成员函数,原因是什么呢?下面我们针对如下例子并对其进行分析进而理解其中缘由:

#include <iostream>
#include <string>
using namespace std;
class MyInt{
private:
    int i;
public:
    MyInt(){

    }
    MyInt(int i) :i(i){

    }
    MyInt& operator++(){
        this->i += 1;
        return *this;
    }
    const MyInt operator++(int){
        MyInt oldInt = MyInt(*this);
        this->i += 1;
        return oldInt;
    }
    void show(){
        cout << i << endl;
    }
};

int main(){
    MyInt mi(10), mi2(100);
    mi2++.show();
    return 0;
}

编译报错:
这里写图片描述
我们可以看到,编译器报错为无法将const MyInt转换为MyInt&,说明const对象调用非const成员函数的时候出现了一些转换问题,下面我们就来进行一下分析:

  1. const对象无法调用非const成员函数:
    void show()等价于void show(MyInt* this),非const对象那个mi2调用时即mi2.show(),即传递了一个非const对象那个指针即MyInt* this进入,因此show函数执行成功!
    const对象呢?const MyInt mi3(10),现在等价于当前传递进去的参数类型是const MyInt*,此时将该指针传递给MyInt*存在一个转化失败问题,所以const成员对象不能调用非const成员对象。
  2. const对象可以调用const成员函数:
    const对象可以调用const成员函数,因为const成员函数默认参数为const MyInt* this,我们创建const对象,即传递进去的指针仍旧为const MyInt*,所以调用成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值