C++重载双目运算符(2)(对象与数之间)

Wesley13
• 阅读 705
有两种方法:(1)采用重载双目运算符方式          (2)1.类型转换函数(将类的对象转换为其他数据类型)               2.转换构造函数(将其他类型转换为类的对象)(仍然要配合重载双目运算符的方式,因为最终实现的是类的两个对象相加)

              (注意:类型转换函数和转换构造函数不可同时使用,会出现二义性!)

/*以下程序均以‘+’为例!*/一:采用重载运算符方式(需要考虑重载符号的左右值顺序,左值为本类对象,则重载函数不需要两个参数;若左值为其他类型,则需要声明为友元函数,                    同时函数参数个数需要2个,并在类外定义普通的函数。详细如下程序。)(1)对象+数据 (采用重载运算符方式)#include <iostream>
using namespace std;
//依据对象数据类型
//假设对象数据是整型,则传进来的double型与对象的数据相加再转为整型
class test
{
public:
    test() {}
    test(int a1) :a(a1) {}
    test operator +(double r)              //当主函数‘+’的左边是对象时,只写一个传进来的参数
    {
        a = a + r;
        return test(a);
    }
    void show()
    {
        cout << a << endl;
    }
private:
    int a;
};
int main()
{
    test t1(1);
    test t2;
    t2 = t1 + 2.3;
    t2.show();
    system("pause");
    return 0;
}

(2)数据+对象 (采用重载运算符方式)#include <iostream>
using namespace std;
//依据对象数据类型
//假设对象数据是整型,则传进来的double型与对象的数据相加再转为整型
class test
{
public:
    test() {}
    test(int a1) :a(a1) {}
    friend test operator +(double r, test&t);              //当主函数‘+’的左边不是对象而是数据时,需定义友元函数,并且参数个数一定要有2个

    void show()
    {
        cout << a << endl;
    }
private:
    int a;
};
test operator+( double r,test&t)                         //注意普通函数的写法
{
    return (t.a + r);
}
int main()
{
    test t1(1);
    test t2;
    t2 = 2.3 + t1;
    t2.show();
    system("pause");
    return 0;
}

二:采用类型转换函数(符号左右值不需要考虑顺序)(数据+对象||对象+数据)
#include <iostream>
using namespace std;

class test
{
public:
    test(){}
    test(int a1):a(a1){}
    operator double()               //类型转换函数,将一个类的对象转换成其他数据类型如:类test t->double;
    {
        return a;
    }
    void show()
    {
        cout<<a<<endl;
    }
private:
    int a;
};
int main()
{
    test t1(1);
    test t;
    t=1.2 + t1;            //如无其他转换构造函数,则调用类型转换函数,将t1转换为double类型,t最终也会转换为double类型
    t.show();
    system("pause");
    return 0;
}

三:采用转换构造函数(配合重载双目运算符函数)
#include <iostream>
using namespace std;

class test
{
public:
    test(){}
    test(double r):a(r){}          //定义转换构造函数
    test operator +(test &t)
    {
        a=a+t.a;
        return test(a);
    }
    void show()
    {
        cout<<a<<endl;
    }
private:
    double a;
};
int main()
{  
    test t1(1);
    test t=1.2;                   //调用转换构造函数,将1.2转换为一个类的对象
    test t3=t1 + t;            
    t3.show();
    system("pause");
    return 0;
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
java8新特性
Stream将List转换为Map,使用Collectors.toMap方法进行转换背景:User类,类中分别有id,name,age三个属性。List集合,userList,存储User对象1、指定keyvalue,value是对象中的某个属性值。 Map<Integer,StringuserMap1userList.str
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这