吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3777|回复: 73

[C/C++] C++ 运算符重载 简易代码 使用模板,使用友元函数重载!

  [复制链接]
gwgirl 发表于 2022-1-26 11:46 | 显示全部楼层 |阅读模式

本帖最后由 gwgirl 于 2022-1-26 11:48 编辑

运行环境:
WIN10
涉及工具:
VS
编程语言:
C、C++

以下为主题内容:
[C++] 纯文本查看 复制代码
#include<stdio.h>


class Number
{
private:
        int x = 0;
        int y = 0;
public:
        Number() {}                                                        //无参构造函数
        Number(int x, int y);                        //构造函数
        void NPrint();                                                        //成员函数
        void puls();                                                        //成员值 ++
        Number operator++(int);                //n++重载函数
        Number operator++();                        //++n重载函数
        Number operator+(const Number& ret1);        //加法运算符重载
        bool operator<(const Number& ret);        //两个类对象比大小

        template<class T>
        friend void SortByTemplate(T* arr, int length);                //定义友元函数 让排序函数可以调用类成员

        template<class T>
        friend void ArrPrint(T* arr, int length);                                        //定义友元函数 让打印函数可以调用类成员
};

template<class T>                                                                                        //如果需要替换两处,那就在定义一个class S 名字随便取
void SortByTemplate(T* arr, int length);                //使用模板实现两个类型用一个函数进行排序
template<class T>                //数组打印模板
void ArrPrint(T* arr, int length);

int main()
{
        Number n1(3, 3), n2(2, 2),n3;        //实现一个  对象 n1++ 的功能 ++运算符重载

        printf("\n打印n1成员初始化后的值\n");
        n1.NPrint();                                                                //打印n1成员的值
        
        n1.puls();                        //使用普通函数给n1成员进行++运算
        printf("\n打印普通函数给n1成员进行++运算的值\n");
        n1.NPrint();                        //打印n1成员++后的值
                
        n1++;                                //使用运算符重载进行++操作
        printf("\n打印n1++现在的值\n");
        n1.NPrint();                        //打印n1成员运算符重载++后的值

        ++n1;                                //使用运算符重载进行++操作
        printf("\n打印++n1现在的值\n");
        n1.NPrint();                        //打印n1成员运算符重载++后的值

        n3 = n1 + n2;        //使用重载运算符计算两个类成员的加法运算
        printf("\n打印n1现在的值\n");
        n1.NPrint();                        //打印n1现在的值
        printf("\n打印n2现在的值\n");
        n2.NPrint();                        //打印n2现在的值
        printf("\n打印n3=n1+n2现在的值\n");
        n3.NPrint();                        //打印n3=n1+n2现在的值
        
        //两个类比大小 并进行排序 ----------------------;
        Number s1(9, 9), s2(3, 3), s3(5, 5), s4(7, 7), s5(4, 4), s6(3, 3);
        Number arr[] = { s1,s2,s3,s4,s5,s6 };
        
        printf("\n结构体模板 Base类型排序前\n");
        ArrPrint(arr, 6);        

        SortByTemplate(arr, 6);
        printf("\n结构体模板 arr类型排序后\n");
        ArrPrint(arr, 6);

        return 0;
}

//Number operator++();                                                                单目运算符 前缀  ++n;
//Number operator++(int);                                                        单目运算符 前缀  n++;
//Number operator--();                                                                        --运算于++运算符使用方法一样
//Number operator+(const Number& p);                两个类成员相加
//Number operator-(const Number& p);                于加法用法一致
//Number operator*(const Number& p);                于加法用法一致
//Number operator/(const Number& p);                于加法用法一致
//bool operator>(const Number& p);
//bool operator<(const Number& p);
//bool operator==(const Number& p);
//
//
//运算符重载:给运算符对应一个具体的函数; 写代码的时候方便


Number::Number(int x, int y) //构造函数 初始化类成员
{
        this->x = x;
        this->y = y;
}

void Number::NPrint()        //Number成员函数 打印类成员
{
        printf("%d %d\n", x, y);
}

void Number::puls()        //Number成员执行++运算
{
        x++;
        y++;
}

Number Number::operator++(int)        //n++运算符重载 类成员执行++操作
{
        x++;
        y++;
        return *this;
}

Number Number::operator++()                //++n运算符重载
{
        x++;
        y++;
        return Number(x, y);                                        //与 return *this 一样
}

Number Number::operator+(const Number& ret)        //加法运算符重载
{
        Number sum;
        sum.x = this->x + ret.x;
        sum.y = this->y + ret.y;
        return sum;
}

bool Number::operator<(const Number& ret)        //两个类对象比大小 
{
        return this->x < ret.x&& this->y < ret.y;                //两个成员都比另一个对象的成员大就返回1
}

 //新建一个冒泡排序的模板  一会用这个模板给类对象排序
template<class T>                                                                                        //如果需要替换两处,那就在定义一个class S 名字随便取
void SortByTemplate(T* arr, int length)                        //使用模板实现两个类型用一个函数进行排序
{
        for (int i = 0; i < length; i++)
        {
                for (int j = 0; j < length; j++)
                {
                        if (arr[j] < arr[j + 1])
                        {
                                T temp = arr[j];
                                arr[j] = arr[j + 1];
                                arr[j + 1] = temp;
                        }
                }
        }
}

template<class T>                //数组打印模板
void ArrPrint(T* arr, int length)
{
        for (int i = 0; i < 6; i++)
        {
                printf("%d %d\n", arr[i].x, arr[i].y);
        }
}



评分

参与人数 19HB +16 THX +7 收起 理由
花盗睡鼠 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
消逝的过去 + 1
金少 + 1
agan8888 + 1
ch_1943 + 1
muker + 1
king51999 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
brswbx201610 + 1
wjp + 2 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
sm5186 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
pmm018 + 1
淡灬看夏丶恋雨 + 1
河图 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
shemyabing + 1 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
kll545012 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
曦照 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
longge188 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
longge188 发表于 2022-1-26 17:23 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
pJXAafK 发表于 2022-1-27 18:13 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
YKkUuXp10 发表于 2022-1-27 18:13 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
CaBTfroL 发表于 2022-1-27 19:31 | 显示全部楼层

没有比这个更强的啦!!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
eklSC40 发表于 2022-1-27 20:51 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
iytwfx01 发表于 2022-1-27 21:07 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
mbkvpGML4 发表于 2022-1-27 22:27 | 显示全部楼层

gwgirl大神。你就是我的偶像!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
河图 发表于 2022-1-28 08:37 | 显示全部楼层

谢谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
KrvHoE6 发表于 2022-1-28 12:23 | 显示全部楼层

正符合我的需要,谢谢楼主
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表