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
  • 1686

C++ operator关键字(重载操作符)

重载运算符 operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。...
  • My_heart_
  • My_heart_
  • 2016年05月29日 22:55
  • 4959

operator->重载问题总结(转)

operator->重载问题总结   编写程序的时候,想让一个对象表现的像一个指针,因此需要重载->运算符。因此写下了如下的代码。由于全部贴出程序比较多,用简化的代码说明一下:class A{ pub...
  • zhuxiufenghust
  • zhuxiufenghust
  • 2010年07月02日 00:54
  • 4469

重载operator ->的说明

重载operator ->目的是为了使一个类对象表现的像一个类型的指针一样如P类对象则表现的像一个A *的作用形式operator->的返回值有两种选择1。返回目的类型的指针       这时把ope...
  • todototry
  • todototry
  • 2007年01月12日 14:44
  • 6678

operator const char*() const

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

this指针 operator* 解析

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

C++operator重载问题

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

C++ 操作符重载 operator = 、operator <

正常情况下我们不能对两个Class进行 = 、 这里有一个 类 person ,我们对这个类进行 = 、...
  • huzhigenlaohu
  • huzhigenlaohu
  • 2014年09月29日 22:34
  • 2105

operator关键字(重载操作符)

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

C++ 对于多重继承 重载operator = 时候的细节注意

// 1233.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" class CA { public: CA(){b = 10;}; ~CA(){}; C...
  • jangdong
  • jangdong
  • 2014年12月02日 19:14
  • 946
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:operator*( )的重载(对于const修饰的成员变量的理解)
举报原因:
原因补充:

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