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

原创 2016年07月03日 16:11:18

一、问题

先来看看下面的程序:

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;
};





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

operator*() 和 operator->()

最近在看侯捷的《STL源码剖析》,在实现iterator的时候,肯定要重载*和->。比如__deque_iterator里面的这两个操作符重载如下:reference operator*() cons...
  • ganso
  • ganso
  • 2007年03月31日 13:03
  • 1270

this指针 operator* 解析

当我在侯捷先生的《STL源码剖析》中看到类似的代码时,我内心产生个疑惑:迭代器的->操作 会不会重复调用了解引用操作即operator*。 先上代码: class testFunc { pub...

operator const char*() const

operator const char*() const是类型转换函数的定义,即该类型可以自动转换为const char*类型。至于最后一个const,那个大家都知道是对类成员的限制(不允许更改对象的...

C++operator重载问题

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。    这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一...

const在函数前与函数后的区别

const在函数前与函数后的区别 一   const基础         如果const关键字不涉及到指针,我们很好理解,下面是涉及到指...
  • clozxy
  • clozxy
  • 2010年06月19日 12:54
  • 67024

C/C++中static和const修饰成员变量与函数--汇总篇

---------------------C语言static部分---------------------   首先需要明确,程序的局部变量存在于“栈”中,全局变量存在于“静态区”中,动态申请数据存在...

extern,static,const修饰变量的用法

首先看两道道面试题: 变量的定义与声明有啥区别? 首先:变量的定义一定也是变量的初始化,反之则不成立, 在一定的作用域中,变量的声明可以有多个,但是定义只有一个;   -》变量在定义时分配内...

const修饰变量、指针详解

概述const常用来修饰普通变量,指针变量,甚至是函数的返回值,可以提高程序的健壮性,其用的最多之处是用来修饰函数的形参,防止修改了调用函数中实参指向地址中的数据及在被调函数运行中修改了形参值。 本...

友元函数与操作符重载入门+const修饰this指针

先对比一下成员函数与全局函数的区别 先对比下全局函数与普通的成员函数 #include class Test { public: //理解this指针的关键,站在测试程序的角度去思考 //什么...

const修饰成员函数及其相关

为了更清晰明了的引出本篇博客所要探讨的问题,还是以一段代码作为开端(一个简单的日期类) class Date { public: Date(int year=1900, int month=1, i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:operator*( )的重载(对于const修饰的成员变量的理解)
举报原因:
原因补充:

(最多只允许输入30个字)