operator*( )的重载(对于const修饰的成员变量的理解)

来源:互联网 发布:2016网络棋牌赌博大案 编辑:程序博客网 时间:2024/05/16 15:38

一、问题

先来看看下面的程序:

class INT{public:INT(){m_i = 20;}int& operator*()const{return m_i;}private:int m_i;};
上面这段程序是编译不通过的,是由于operator*()函数是使用const进行修饰的,m_i现在为const int的类型,int&是不能进行引用的

该为下面的程序,便可以运行成功

class INT{public:INT(){m_i = 20;}int& operator*()const{return <span style="color:#ff0000;">(int&</span>)m_i;}private:int m_i;};
加上强制类型转换之后变可以运行成功

二、补充

1、例子

上面的例子由于是int类型的说明不够清楚

下面这个指针的例子:

class INT{public:INT(){m_i = 20;}int*& operator*()const{return m_i;}private:int* m_i;};
对于上述的程序同样是编译不通过的(为什么呢?

那么到底现在是const int* 还是int* const呢?

当然是int* const了(这样才能和const修饰的成员变量的意义相符


2、解决办法

class INT{public:INT(){m_i = NULL;}int*& operator*()const{return (<span style="color:#ff0000;">int*&</span>)m_i;}private:int* m_i;};





0 0
原创粉丝点击