C++day4(拷贝赋值函数、匿名对象、友元、常成员函数和常对象、运算符重载)

一、Xmind整理:

二、上课笔记整理:

1.day3作业订正:设计一个Per类,类中包含私有成员:姓名、年龄、指针成员身高...

#include <iostream>using namespace std;//封装人 类
class Person
{
private:string name;int age;double *h; //身高
public://无参构造函数Person() { cout << "Person::无参构造函数" << endl;}//有参构造Person(string name, int age , double h):name(name),age(age),h(new double(h))//h = new double(h){cout << "Person::有参构造函数" << endl;}//拷贝构造函数Person(const Person& p):name(p.name),age(p.age),h(new double(*(p.h))){cout << "Person::拷贝构造函数" << endl; }~Person(){cout << "Person::析构函数"  << endl;delete h;}};//封装学生 类
class Stu
{
private:int math;Person p;
public://Stu() {cout << "Stu::无参构造" << endl;}//Stu(string name, int age, double h, int math):math(math),p(name,age,h){cout << "Stu::有参构造" << endl;}//拷贝构造函数Stu(const Stu& s):math(s.math),p(s.p){cout << "Stu::拷贝构造函数" << endl;}~Stu(){cout << "Stu::析构函数"  << endl;}};int main()
{Stu s; //Stu s1("张三",34,189,67); //Stu s2 = s1;  //return 0;
}

 2.封装学生的类,写出构造函数,析构函数、拷贝构造函数、拷贝赋值函数

#include <iostream>using namespace std;
class Stu
{
private:string name;int age;
public:Stu(){cout << "无参构造函数" << endl;}Stu(string name,int age):name(name),age(age){cout << "有参构造函数" << endl;}Stu(const Stu &other):name(other.name),age(other.age){cout << "拷贝构造函数" << endl;}Stu &operator=(const Stu &other){if(this != &other){name = other.name;age = other.age;cout << "拷贝赋值函数" << endl;}return *this;}~Stu(){cout << "析构函数"  << endl;}void display(){cout << name << endl;cout << age << endl;}
};int main()
{Stu s1 ("zhangsan",20);s1.display();Stu s2 =s1;s2.display();Stu s3;s3 = s2;s3.display();return 0;
}

3.匿名对象

#include <iostream>using namespace std;
class Stu
{
private:string name;int age;
public:Stu(){cout << "无参构造函数" <<endl;}Stu(string name,int age):name(name),age(age){cout << "有参构造函数" << endl;}void show(){cout << name << endl;cout << age << endl;}};
void fun(Stu s)
{s.show();
}int main()
{Stu s1 = Stu("zhangsan",12);s1.show();Stu s[3] = {Stu("a",1),Stu("b",2),Stu("c",3)};s[0].show();s[1].show();s[2].show();fun(Stu("lisi",5));return 0;
}

4.全局函数、类做友元

#include <iostream>using namespace std;
class Room
{friend void goodgay(Room &r);friend class GoodGay;
private:string mybedroom;
public:string livingroom;
public:Room(){mybedroom = "卧室";livingroom = "客厅";}
};//类做友元
class GoodGay
{
public:Room *r;void visit(){cout << "好基友类正在访问" << r->mybedroom <<endl;cout << "好基友类正在访问" << r->livingroom <<endl;}
public:GoodGay(){r = new Room;}
};//全局函数做友元
void goodgay(Room &r)
{cout << "好基友函数正在访问" << r.mybedroom <<endl;cout << "好基友函数正在访问" << r.livingroom <<endl;
}int main()
{Room r;goodgay(r);GoodGay g;g.visit();return 0;
}

5.成员函数做友元

#include <iostream>using namespace std;class Room;//声明有这样的类//类做友元
class GoodGay
{
public:Room *r;void visit();//在类内声明GoodGay();
};//封装 房间 类
class Room
{friend void GoodGay::visit();  //这个类的成员函数是本类的好朋友。可以访问本类所有成员
private:string m_BedRoom;  //卧室
public:string m_SittingRoom; //客厅
public://无参Room(){m_BedRoom = "卧室";m_SittingRoom = "客厅";}
};void GoodGay::visit()  //在类外定义成员函数
{cout << "好基友类正在访问。。" << r->m_SittingRoom << endl;cout << "好基友类正在访问。。"  << r->m_BedRoom << endl;
}
GoodGay::GoodGay()
{r = new Room;
}int main()
{GoodGay g;g.visit();return 0;
}

6.常成员函数

#include <iostream>using namespace std;class Stu
{
private:string name;int age;
public://无参构造函数Stu(){}//有参构造函数Stu(string name, int age):name(name),age(age){}//常成员函数void show()const{cout << "姓名:" << name << endl;cout << "年龄:" << age << endl;}
};int main()
{Stu s1("zhangsan",10);s1.show();return 0;
}

 7.常对象+mutable关键字

#include <iostream>using namespace std;class Stu
{
private:string name;mutable int age;
public://无参构造函数Stu(){}//有参构造函数Stu(string name, int age):name(name),age(age){}//常成员函数void show()const{age = 19;cout << "姓名:" << name << endl;cout << "年龄:" << age << endl;}//非常成员函数void show(){age = 16;cout << "姓名:" << name << endl;cout << "年龄:" << age << endl;}
};int main()
{//非常对象Stu s1("zhangsan",10);s1.show();//常对象const Stu s2("lisi",15);s2.show();return 0;
}

8.实现+号运算符重载(成员函数、全局函数)

#include <iostream>using namespace std;class Person
{// friend const Person operator+(const Person &L, const Person &R);
private:int a;int b;
public://无参构造函数Person(){}//有参构造函数Person(int a, int b):a(a),b(b){}//成员函数实现 + 号运算符重载const Person operator+(const Person &R)const{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;
//}int main()
{Person p1(10,10);Person p2(10,10);Person p3 = p1 + p2;p3.show();return 0;
}

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

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

相关文章

【大模型AIGC系列课程 2-2】大语言模型的“第二大脑”

1. 大型语言模型的不足之处 很多人使用OpenAI提供的GPT系列模型时都反馈效果不佳。其中一个主要问题是它无法回答一些简单的问题。 ● 可控性:当我们用中文问AI一些关于事实的问题时,它很容易编造虚假答案。 ● 实时性:而当你询问它最近发生的新闻事件时,它会干脆地告诉你…

【使用深度学习的城市声音分类】使用从提取音频特征(频谱图)中提取的深度学习进行声音分类研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

四信5G工业路由器赋能5G LAN全连接工厂建设

5G作为“新基建”之首&#xff0c;肩负着驱动国民经济转型升级、促进实体经济与数字经济深度融合、满足各行各业高质量通信服务需求的重任。 随着5G技术的更新迭代&#xff0c;各行各业对网络的可靠性&#xff0c;确定性等提出更高的需求&#xff0c;5G LAN作为3GPP R16标准定…

【面试 反思】Retrofit源码与设计 7 连问

前言 在实际项目中往往是使用Retrofit来做网络请求工作。Retrofit采用RESTful风格&#xff0c;本质上只是对OkHttp进行封装&#xff0c;今天我们根据几个问题来进一步学习一下Retrofit的源码与设计思想。 1. 使用方法 直接看一下官方介绍的使用方法。 public final class S…

[MyBatis系列③]动态SQL

目录 1、简介 2、if标签 3、foreach标签 4、SQL抽取 ⭐MyBatis系列①&#xff1a;增删改查 ⭐MyBatis系列②&#xff1a;两种Dao开发方式 1、简介 开发中在MyBatis映射文件配置SQL语句&#xff0c;但是前面配置的都是比较简单的&#xff0c;不涉及稍复杂的业务场景。想要应…

SpringBootWeb案例 Part 5

4. 配置文件 员工管理的增删改查功能我们已开发完成&#xff0c;但在我们所开发的程序中还一些小问题&#xff0c;下面我们就来分析一下当前案例中存在的问题以及如何优化解决。 4.1 参数配置化 在我们之前编写的程序中进行文件上传时&#xff0c;需要调用AliOSSUtils工具类&…

STM32使用PID调速

STM32使用PID调速 PID原理 PID算法是一种闭环控制系统中常用的算法&#xff0c;它结合了比例&#xff08;P&#xff09;、积分&#xff08;I&#xff09;和微分&#xff08;D&#xff09;三个环节&#xff0c;以实现对系统的控制。它的目的是使 控制系统的输出值尽可能接近预…

Facebook HiPlot “让理解高维数据变得容易”

在这个全球信息化的时代&#xff0c;数据量呈爆炸式增长&#xff0c;数据的复杂性也是如此。如何有效地处理高维数据并找到隐藏在其中的相关性和模式是一个严峻的挑战。近年来&#xff0c;可视化和可视化分析已被应用于该任务&#xff0c;并取得了一些积极成果。Facebook的新Hi…

『C语言入门』初识C语言

文章目录 前言C语言简介一、Hello World&#xff01;1.1 编写代码1.2 代码解释1.3 编译和运行1.4 结果 二、数据类型2.1 基本数据类型2.2 复合数据类型2.3 指针类型2.4 枚举类型 三、C语言基础3.1 变量和常量3.2 运算符3.3 控制流语句3.4 注释单行注释多行注释注释的作用 四、 …

element表格多选实现

表格实现多选 实现表格多选很简单&#xff0c;只需要在表格里加上一列即可&#xff0c;加完之后就会在表格里出现一列白色的四方块按钮&#xff0c;可以多选&#xff0c;也可以单选 <el-table-columntype"selection"width"55"align"center"&…

iOS App逆向之:iOS应用砸壳技术

在iOS逆向&#xff0c;有一项关键的技术叫做“iOS砸壳”&#xff08;iOS App Decryption&#xff09;。自iOS 5版本以来&#xff0c;苹果引入了应用程序加密机制&#xff0c;使得大部分应用都需要进行砸壳操作才能进行逆向分析。因此作为开发者、逆向工程师和安全研究人员都需要…

Python Opencv实践 - 图像直方图自适应均衡化

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/cat.jpg", cv.IMREAD_GRAYSCALE) print(img.shape)#整幅图像做普通的直方图均衡化 img_hist_equalized cv.equalizeHist(img)#图像直方图自适应均衡化 #1. 创…

【动手学深度学习】--21.锚框

锚框 学习视频&#xff1a;锚框【动手学深度学习v2】 官方笔记&#xff1a;锚框 1.锚框 目标检测算法通常会在输入图像中采样大量的区域&#xff0c;然后判断这些区域中是否包含我们感兴趣的目标&#xff0c;并调整区域边界从而更准确地预测目标的真实边界框&#xff08;gro…

hive问题总结

往往用了很久的函数却只知道其单一的应用场景&#xff0c;本文将不断完善所遇到的好用的hive内置函数。 1.聚合函数或者求最大最小值函数搭配开窗函数使用可以实现滑动窗口 例&#xff1a; SELECT event,time,session_id,COLLECT_LIST(event) OVER (PARTITION BY session_id …

ChatGPT + Flutter快速开发多端聊天机器人App

下载地址&#xff1a;ChatGPT Flutter快速开发多端聊天机器人App 下载地址&#xff1a;ChatGPT Flutter快速开发多端聊天机器人App

PL 侧驱动和fpga 重加载的方法

可以解决很多的问题 时钟稳定后加载特定fpga ip &#xff08;要不内核崩的一塌糊涂&#xff09;fpga 稳定复位软件决定fpga ip 加载的时序 dluash load /usr/local/scripts/si5512_setup.lua usleep 30 mkdir -p /lib/firmware cp -rf /usr/local/firmare/{*.bit.bin,*.dtbo} …

Flutter实现动画列表AnimateListView

由于业务需要&#xff0c;在打开列表时&#xff0c;列表项需要一个从右边飞入的动画效果&#xff0c;故封装一个专门可以执行动画的列表组件&#xff0c;可以自定义自己的动画&#xff0c;内置有水平滑动&#xff0c;缩放等简单动画。花里胡哨的动画效果由你自己来定制吧。 功…

206.Flink(一):flink概述,flink集群搭建,flink中执行任务,单节点、yarn运行模式,三种部署模式的具体实现

一、Flink概述 1.基本描述 Flink官网地址:Apache Flink — Stateful Computations over Data Streams | Apache Flink Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。 2.有界流和无界流 无界流(流): 有定义流的开始,没有定义结束。会无休止…

【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分享...

全文下载链接&#xff1a;http://tecdat.cn/?p23544 在本文中&#xff0c;长短期记忆网络——通常称为“LSTM”——是一种特殊的RNN递归神经网络&#xff0c;能够学习长期依赖关系&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 本文使用降雨量数据&#xf…

Docker file解析

文章目录 简介构建的三步骤Docker执行Dockerfile的大致流程DockerFile常用保留字指令创建第一个Dockerfile镜像的缓存特性 Docker file 解析 简介 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本&#xff0c;记录了镜像构…