zoukankan      html  css  js  c++  java
  • C++重载双目运算符(2)(对象与数之间)

    有两种方法:(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;
    }
  • 相关阅读:
    第四次实践作业
    第三次实践作业
    第二次实践作业
    第一次实践作业
    第02组 Beta版本演示
    第02组 Beta冲刺(4/4)
    大数据应用技术课程实践--选题与实践方案
    15 手写数字识别-小数据集
    14 深度学习-卷积
    13 垃圾邮件分类2
  • 原文地址:https://www.cnblogs.com/god-for-speed/p/10843375.html
Copyright © 2011-2022 走看看