c++(8.24)拷贝赋值对象,匿名对象,友元,常成员和常对象,mutable关键字,运算符重载

作业:

实现关系运算符重载(仅>,<,==):

#include <iostream>using namespace std;class Person
{int a;int b;friend bool operator== (const Person &L,const Person&R);
public:Person(){}Person(int a,int b):a(a),b(b){}bool operator> (const Person&R)const{if(a>R.a&&b>R.b){return true;}else{return false;}}bool operator< (const Person&R)const{if(a<R.a&&b<R.b){return true;}else{return false;}}
};
bool operator== (const Person &L,const Person&R)
{if(L.a==R.a&&L.b==R.b){return true;}else{return false;}
}int main()
{Person p1(10,10),p2(10,10),p3(20,20);if((p1>p2)==true){cout << "p1大于p2" << endl;}elsecout << "p1不大于p2" << endl;if((p1==p2)==true){cout << "p1等于p2" << endl;}elsecout << "p1不等于p2" << endl;if((p1<p2)==true){cout << "p1小于p2" << endl;}elsecout << "p1不小于p2" << endl;if((p2>p3)==true){cout << "p2大于p3" << endl;}elsecout << "p2不大于p3" << endl;if((p2==p3)==true){cout << "p2等于p3" << endl;}elsecout << "p2不等于p3" << endl;if((p2<p3)==true){cout << "p2小于p3" << endl;}elsecout << "p2不小于p3" << endl;return 0;
}

拷贝赋值函数实例:

#include <iostream>using namespace std;
class stu
{string name;int age;
public:void show (){cout << name << age << endl;}stu(string name,int age):name(name),age(age){cout << "这是stu的构造函数" << endl;}stu(stu &other):name(other.name),age(other.age)//构造函数,需要初始化列表{cout << "这是stu的拷贝构造函数" << endl;}stu& operator=(const stu& other)//拷贝赋值函数,不需要初始化列表{if(this != &other)//避免自己被赋值给自己{name=other.name;age=other.age;}cout <<"这是stu的拷贝赋值函数"  << endl;return *this;}~stu(){cout << "这是stu的析构函数" << endl;}
};int main()
{stu s1("张三",20);stu s2=s1;stu s3("",0);s3=s2;return 0;
}

 

 匿名对象实例:

#include <iostream>using namespace std;
class stu
{string name;int age;
public:stu(string name,int age):name(name),age(age){cout << "这是stu的构造函数" << endl;}stu(const stu& other):name(other.name),age(other.age){cout << "这是stu的拷贝构造函数" << endl;}stu& operator=(const stu& other){name=other.name;age=other.age;return *this;}~stu(){cout <<"这是stu的析构函数" << endl;}
};int main()
{stu s1=stu("张三",20);//用匿名类做赋值操作stu s[3]={stu("a",1),stu("b",2),stu("c",3)};//用匿名类做类数组的赋值操作return 0;
}

 友元实例:

#include <iostream>using namespace std;class Room
{friend void good(Room &s);//声明good函数是友元函数,就可以调用本类中的所有成员friend class bad;//声明bad类是友元,bad类就可以调用本类中的所有成员string badroom;
public:string livingroom;Room(string badroom,string livingroom):badroom(badroom),livingroom(livingroom){cout<< "这是Room的构造函数" << endl;}Room()//无参构造{}
};
void good(Room &s)
{cout << s.livingroom << endl;cout << s.badroom <<endl;
}
class bad
{
public:Room s1;void visit(){cout << s1.badroom << endl;//调用s1中的私有成员cout << s1.livingroom <<endl;}};int main()
{Room s("卧室","客厅");good(s);bad a;return 0;
}

常成员和常对象实例:

#include <iostream>using namespace std;class Stu
{string name;mutable int age;//加了mutable,就可以在常成员函数中修改
public:Stu()//无参构造函数{}Stu(string n,int a):name(n),age(a)//有参构造类型{ }void show()const//常成员函数,不做修改{age=30;//会报错,因为是const类型的成员函数,不能做修改,当age加了mutable,就变成可以在常成员函数中修改cout << "名字是:" << name << endl;cout << "年龄是:" << age << endl;}void show()//非常成员函数{age=25;cout << "名字是:" << name << endl;cout << "年龄是:" << age << endl;}
};int main()
{Stu s1("张三",18);//非常对象s1.show();//有常成员函数和非常成员函数,优先调用非常成员函数,只有常成员函数,调用常成员函数const Stu s2("里斯",20);//常对象s2.show();//调用常成员函数,年龄不会发生改变//当只有非常成员函数时,s2无法调用非常成员函数return 0;
}

算数运算符重载:

 

#include <iostream>using namespace std;class Person
{friend const Person operator+(const Person &L,const Person &R);friend const Person operator>(const Person &L,const Person &R);int a;int b;
public:Person(){};Person(int a,int b):a(a),b(b){}
//    const Person operator+(const Person &R)
//    {
//        Person temp;
//        temp.a=a+R.a;
//        temp.b=b+R.b;
//        return temp;
//    }void show(){cout << "a = " << a << endl;cout << "b = " << b << endl;}
};
const Person operator+(const Person &L,const Person &R)//全局
{Person temp;temp.a = L.a + R.a;temp.b = L.b + R.b;return temp;
}
const Person operator>(const Person &L,const Person &R)
{Person temp;temp.a = (L.a > R.a) ? L.a : R.a;temp.b = (L.b > R.b) ? L.b : R.b;return temp;
}
int main()
{Person p1(10,10);Person p2(10,10);Person p3=p1+p2;//假设调用类内的运算符重载,本质:p3=p1.operator+(p2)p3.show();Person p4=p2+p3;//假设调用类外的运算符重载,本质:p4=operator(p2,p3)p4.show();Person p5(5,11);Person p6;p6 = p5 > p1;p6.show();return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/82455.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 学习笔记 简单实验

1.代码(html) <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"counter">Counter: {{ counter }} </div> <script> const Counter {data() {return {counter: 5}} } Vue.cr…

FPGA解析串口指令控制spi flash完成连续写、读、擦除数据

前言 最近在收拾抽屉时找到一个某宝的spi flash模块&#xff0c;如下图所示&#xff0c;我就想用能不能串口来读写flash&#xff0c;大致过程就是&#xff0c;串口向fpga发送一条指令&#xff0c;fpga解析出指令控制flah&#xff0c;这个指令协议目前就是&#xff1a; 55 AA …

OpenCV项目开发实战--基于Python/C++实现鼠标注释图像和轨迹栏来控制图像大小

鼠标指针是图形用户界面 (GUI) 中的关键组件。没有它,您就无法真正考虑与 GUI 进行交互。那么,让我们深入了解 OpenCV 中鼠标和轨迹栏的内置函数。我们将演示如何使用鼠标来注释图像,以及如何使用轨迹栏来控制图像的大小 我们将使用下图来演示 OpenCV 中鼠标指针和轨迹栏功能…

低代码赋能| 智慧园区项目开发痛点及解决方案

智慧园区是一个综合体&#xff0c;集技术开发、产业发展和学术研究于一体。作为未来智慧城市建设的核心&#xff0c;智慧园区充当着“产业大脑”和“指挥中心”的角色。它通过整合园区内的制造资源和第三方服务能力&#xff0c;实现园区各组成部分的协调运作、良性循环和相互促…

一个程序员的工作日记--每天就干两件事,一年后让别人刮目相看

文章目录 成功源于专注一、早上布局二、晚上复盘三、技术细节四、专注与成功五、专注的重要性六、忙碌和赚钱七、结论以嵌入式开发为例&#xff1a;一、早上布局二、晚上复盘三、技术细节四、专注与成功五、忙碌和赚钱六、结论在嵌入式软件开发中&#xff0c;我们需要按照以下步…

Midjourney 完整版教程(从账号注册到设计应用)

目录 一、Midjourney 介绍 二、Midjourney 的AI出图示例 三、手把手教你上手Midjourney 1、账号&初始化 1.1 账号注册登录 1.2 账号付费 1.3 账号初始化 2、Midjourney的基础设置 3、Midjourney 出图步骤。 (一)直接描述出图 (二)垫图生图。 4、Midjourney的…

控制疫情蔓延嵌入式物联网能帮大忙

联合国所订定之永续发展目标之一&#xff0c;便是针对防治传染病的蔓延做好准备。在新型冠状病毒(COVID-19)流行期间&#xff0c;防疫已成为当前最重要目标&#xff0c;科技在对抗传染病方面扮演重要角色&#xff0c;而物联网(IoT)相关技术正是我们重要的防疫武器──降低成本、…

数据结构——线性数据结构(数组,链表,栈,队列)

文章目录 1. 数组2. 链表2.1. 链表简介2.2. 链表分类2.2.1. 单链表2.2.2. 循环链表2.2.3. 双向链表2.2.4. 双向循环链表 2.3. 应用场景2.4. 数组 vs 链表 3. 栈3.1. 栈简介3.2. 栈的常见应用常见应用场景3.2.1. 实现浏览器的回退和前进功能3.2.2. 检查符号是否成对出现3.2.3. 反…

LLMs参考资料第一周以及BloombergGPT特定领域的训练 Domain-specific training: BloombergGPT

1. 第1周资源 以下是本周视频中讨论的研究论文的链接。您不需要理解这些论文中讨论的所有技术细节 - 您已经看到了您需要回答讲座视频中的测验的最重要的要点。 然而&#xff0c;如果您想更仔细地查看原始研究&#xff0c;您可以通过以下链接阅读这些论文和文章。 1.1 Trans…

scope测试CAN物理层

应用范围 测试CAN物理层&#xff1a;bus显性位电平、隐性位电平、bit长度、波特率等 要点 接线 sync同步线scope的trigger线&#xff0c;需要连到报文所在的bus/通道的那个CAN设备&#xff08;vector&#xff09;上&#xff0c;如可以连到VN1640的sync三点端子口&#xff0…

[JavaWeb]【十二】web后端开发-事务管理AOP

目录 一、事务管理 1.1 事务回顾 1.2 Spring事务管理 1.2.1 案例 1.2.1.1 EmpMapper新增deleteByDeptId方法 1.2.1.2 DeptServiceImpl 1.2.1.3 启动服务-测试 1.2.2 模拟异常 1.2.3 分析问题 1.2.4 Spring事务管理&#xff08;一般用在类似多次delete&#xff09; 1.2.4…

微信小程序|步骤条

步骤条是现代用户界面设计中常见的元素之一,它能够引导用户按照预定顺序完成一系列任务或步骤。在小程序中,实现步骤条可以为用户提供更好的导航和引导,使用户体验更加流畅和直观。本文将介绍如何在小程序中实现步骤条,并逐步展示实现的过程和关键技巧 目录 步骤条的作用及…