设为首页 加入收藏

TOP

C++编程开发运算符重载解析
2018-02-24 09:52:46 】 浏览:162
Tags:编程 开发 运算 重载 解析

C++编程开发运算符重载解析。

????? ? 现在我们有一个类叫做购物车(shopping cart简称SC)。想不出什么功能,就简单点:就一个输出总费用

的功能,大概这样。然后我现在车里有个iPad Air 2。

#include
  
   
using namespace std;

class SC
{
	int price;
public:
	SC(int p=0)
	{
		price = p;
	}
	~SC(){}
	void show()
	{
		cout<
   
    

????? ? 现在我要往车里加东西,在类里面添加一个求和的功能。

	int add(SC a)
	{
		price += a.price;
		return price;
	}

????? ? 为了使用的时候少打add跟括号,现在重载+运算符,把add改成operator+即可。

	int operator+(SC a)
	{
		price += a.price;
		return price;
	}

????? ? 现在可以直接使用SC1 + SC2了。

 

????? ? 在这里,operator+函数是类的成员函数。

????? ? 下面,假设我觉得一台ipad不够用,我要给家人一人买一台,需要加一个乘法功能。

	int operator*(int n)
	{
		return price*n;
	}

????? ? 现在,cout<

左操作数必须是调用对象,但常理上iPadAir2*3与3*iPadAir2应该是等价的,用友元函数就可以很好地解决这个问题。

	friend int operator*(int n,SC &a)
	{
		a = a*n;
		return a.price;
	}

????? ? 类的友元函数是非成员函数,但其访问权限与成员函数相同。

????????友元常用于重载<<运算符,便于用cout对类进行输出。若不使用友元,而使用成员函数重载<<替代show函数,

函数代码如下:

	void operator<<(ostream &c)
	{
		cout<
     
      

????? ? 这样的缺陷是,因为调用对象必须为左操作数,故使用时必须写作iPadAir2<

????? ? 利用友元反转操作数顺序即可达到预期效果:

	friend void operator<<(ostream &c,SC a)
	{
		cout<
       
        

????? ? 现在还存在的一个问题是,无法像输出基本类型时那样一次输出多个数,即不能cout<

????? ? 现在看一下<<运算符的定义: 其左边必须是一个ostream对象,如cout<<1;显然满足这一点。我们都知道,

????? ? cout<<1<<2;是可行的,这意味着2前面的<<运算符左边的cout<<1是一个ostream对象,于是乎只要将

operator<<()函数的返回类型改为对ostream对象的引用即可。

	friend ostream& operator<<(ostream &c,SC a)
	{
		cout<
         
          ????? ? 睡了睡了,明天再看。
          

 

????????

????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++运算符重载实例(以购物车为例.. 下一篇C++ 虚基类和抽象类关系讲解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目