博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解运算符重载 4
阅读量:5291 次
发布时间:2019-06-14

本文共 2079 字,大约阅读时间需要 6 分钟。

#include "stdafx.h"

#include <iostream>
#include <string>

/*
重载运算符,选择成员还是非成员实现?
1 赋值(=), 下标([]), 调用(()), 成员访问箭头(->)操作符必须定义为成员
2 复合赋值操作符( +=, -=, *=, \=, %=, &=, ^=, |= , <<=, >>=) 一般定义为类的成员,但不是必须这么做,也可以定义为非成员
3 自增,(++),自减(--)和解引用(*)一般会定义为类成员
4 算术运算符(+, -, *, /, %, ),相等操作符( == ),关系操作符(>, < , >=, <=,),位操作符(&, ^, |, !),一般定义为非成员实现。
*/

namespace operator_test

{

class CObject

{
friend std::ostream& operator<<(std::ostream& out, const CObject& obj);
public:
CObject(int a) : m_a(a)
{

}

int Get()

{
return m_a;
}

CObject& operator=(CObject& obj)

{
this->m_a = obj.Get();
return *this; //赋值运算符重载必须返回 *this
}

CObject& operator=(int obj)

{
this->m_a = obj;
return *this; //赋值运算符重载必须返回 *this
}

CObject& operator++()

{
this->m_a++;
return *this;
}

CObject operator++(int)

{
//
//因为是后缀,所以必须要返回一个副本
//
CObject newObj = CObject(this->m_a);
this->m_a++;
return newObj;
}

private:

int m_a;
};

CObject operator+(CObject& obj1, CObject& obj2)

{
return CObject(obj1.Get() + obj2.Get());
}

CObject operator*(CObject& obj1, CObject& obj2)

{
return CObject(obj1.Get()*obj2.Get());
}

bool operator==(CObject& obj1, CObject& obj2)

{
return (obj1.Get() == obj2.Get());
}
bool operator!=(CObject& obj1, CObject& obj2)
{
return !(obj1.Get() == obj2.Get());
}

std::ostream& operator<<(std::ostream& out, const CObject& obj)

{
out << obj.m_a;
return out;
}
}

void test_operator_test()

{
operator_test::CObject obj1(10);
operator_test::CObject obj2(20);

//

//重载算术运算符
//
operator_test::CObject add = obj1 + obj2;
std::cout << add << std::endl;

operator_test::CObject muil = obj1*obj2;

std::cout << muil << std::endl;

//

//重载相等运算符
//
if(obj1 == obj2)
{
std::cout << "obj1 == obj2" << std::endl;
}else
{
std::cout << "obj1 != obj2" << std::endl;
}

//

//重载赋值操作符.
//
operator_test::CObject newObject = obj1;
std::cout << newObject << std::endl;

//

//自增操作符++( 自减原理一样 )重载
//
std::cout << newObject++ << std::endl;
std::cout << newObject << std::endl;

newObject = 10;

std::cout << ++newObject << std::endl;

std::cout << "---------------------------" << std::endl;

}

转载于:https://www.cnblogs.com/sysnap/p/3440048.html

你可能感兴趣的文章
Attribute(特性)与AOP
查看>>
第三次作业
查看>>
Codeforces 962 /2错误 相间位置排列 堆模拟 X轴距离最小值 前向星点双连通分量求只存在在一个简单环中的边...
查看>>
Matrix快速幂 模板
查看>>
MySQL开启远程连接权限
查看>>
tomcat7.0.27的bio,nio.apr高级运行模式
查看>>
C#预处理器命令
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
HDUOJ ------1398
查看>>
cf--------(div1)1A. Theatre Square
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
Html学习_简易个人网页制作
查看>>
angular中ng-bind指令小案例
查看>>
jqery总结
查看>>
Lodop获取客户端主网卡ip地址是0.0.0.0
查看>>
VSCODE更改文件时,提示:EACCES: permission denied的解决办法(mac电脑系统)
查看>>
web前端之路,js的一些好书(摘自聂微东 )
查看>>