c++day4 ——homework

news2024/11/26 21:52:26

1.思维导图

2. 整理类中特殊成员函数:构造函数,析构函数,拷贝构造函数,拷贝赋值函数的使用和实现

特殊成员函数的使用和实现:
①	构造函数
功能:当使用类实例化对象时,给类对象初始化空间以及初始化使用
格式:函数名与类同名
没有返回值
可以有参和无参(可以重载)
格式:类名(形参列表){函数体内容}
一般为公有权限
调用时机:使用类进行实例化对象时,系统自动调用,无需手动调用
栈区:实例化类对象时,自动调用构造函数
堆区:定义类指针时,不调用构造函数,在使用new申请空间时才调用构造函数

必须使用初始化列表的情况:
A.	当构造函数的形参名和成员变量名同名时,可以用初始化列表解决,在函数体内,用this指针解决冲突
B.	当有常成员变量时,对该变量的初始化工作,必须放在初始化列表中,不能放到函数体内
C.	当有引用成员变量时,对该成员初始化
D.	当类中有其他类的成员子对象时,对该成员的初始化,也必须在初始化列表中显性调用其构造函数完成
②	析构函数
功能;当对象消亡时,用于回收对象的内存空间以及善后工作的
格式:函数名:类名前加~
		没有返回值
没有参数(没有重载,一个类中只能有一个析构函数)
		访问权限:一般为公共权限
		格式:~类名(){函数体内容}
调用时机:当对象消亡时,系统会自动调用,无需手动调用
			栈区:当对象生命周期结束后,会自动调用,无需手动调用
			堆区:如何使用delete释放对象空间,何时调用析构函数,先构造后析构
默认析构函数:
A.	当类中没有显性定义析构函数时,系统会默认提供一个析构函数,来完成对对象空间的释放
B.	如果类中显性定义了析构函数,则系统就不再提供默认的析构函数
C.	当类中没有指针成员时,对于类对象的析构,只需使用系统提供的析构函数即可,当类中有指针成员并指向堆区空间时,则需要显性定义析构函数,在析构函数的函数体内,完成对堆区空间的释放
D.	当有继承关系时,我们一般需要显性定义析构函数,并且要定义成虚析构函数

③	拷贝构造函数
功能:使用一个类对象给另一个类对象进行初始化工作的
格式:函数名与类同名
		 无返回值
		 参数:同类的其他类对象的引用
		权限:public
		格式:类名(类名&other){}
调用时机:使用一个类对象给另一个类对象初始化时,系统自动调用
			类对象作为函数参数传递时,也会自动调用拷贝构造函数
			函数的返回值时类对象时,也会自动调用拷贝构造函数
深拷贝:
浅拷贝:	
④	拷贝赋值函数
功能:本质上是运算符重载,也叫等号运算符重载函数,完成一个类对象给另一个类对象赋值时系统自动调用的
格式:函数名:operator=
		返回值:该左操作数自身的引用
		参数:同类的其他类对象
		权限:public
格式:类名&operator = (const 类名&other){函数体内容}
调用时机:当使用一个类对象给另一个类对象进项赋值时,系统自动调用

3.复习俩个运算符重载,理清参数和返回值在重载中的作用算 数运算符,赋值运算符

运算符重载参数:
a.运算符重载函数的参数由运算符本身决定
b.函数返回值可以由用户根据实际情况决定
运算符返回值类型:operator#(参数列表)

4.尝试实现条件函数的重载,成员函数的函数头:bool operator#(类名 &类对象)

#include <iostream>

using namespace std;
class Stu
{
    string name;
    int age;
    int score;
public:
    Stu()
    {
        cout << "Stu no parameters" << endl;
    }
    Stu(string name,int age,int score)
    {
       this->name = name;
       this->age = age;
       this->score = score;
       cout << "Stu have parameters" << endl;
    }
    //destructor function
    ~Stu()
    {
        cout << "destructor function " <<endl;
    }
    //output object value
    void show()
    {
        cout << "name:" << name <<endl;
        cout << "age:" << age <<endl;
        cout << "score:" << score <<endl;
    }
    //copy construction function
    Stu(Stu &other):name(other.name),age(other.age),score(other.score)
    {
        cout <<"copy construction function" << endl;
    }
    //copy assignment function
    Stu &operator = (const Stu &other)
    {
        this->name = other.name;
        this->age = other.age;
        this->score = other.score;
        cout <<"copy assignment function" << endl;
    }
    //+operator overload
    Stu &operator+(Stu &p1)
    {
        static Stu p3;
        p3.name = this->name + p1.name;
        p3.age = this->age + p1.age;
        p3.score = this->score +p1.score;
        cout << "this is operator overload +" << endl;
        return p3;
    }
    friend Stu &operator +=(Stu &p1,Stu &p2);
    //>operator function
    bool operator >(Stu &p)
    {
        cout <<"this is > operator function"<< endl;
        return (this->age>p.age);
    }

};
//+=assignment operator overload
Stu &operator +=(Stu &p1,Stu &p2)
{
    p1.name +=p2.name;
    p1.age +=p2.age;
    p1.score+=p2.score;
    return p1;
}
int main()
{
    Stu p1("lll",18,99);
    Stu p2("sss",1,2);
    p1.show();
    p2.show();
    cout << "~~~~~~one~~~~~~~~~~~~~" << endl;
    Stu p3 = p1;
    p3.show();
    cout << "~~~~~~~~~tow~~~~~~~~~~" << endl;
    Stu p4;
    p4 = p1;
    p4.show();
    cout << "~~~~~~~~three~~~~~~~~~~~" << endl;
    Stu p5 = p1+p2;
    p5.show();
    cout << "~~~~~~~four~~~~~~~~~~~~" << endl;
    p2+=p1;
    p2.show();
    cout << "~~~~~~~~~~five~~~~~~~~~" << endl;
    bool sum = p1 > p2;
    cout << "bool:" << sum << endl;
    return 0;
}

运行结果

Stu have parameters
Stu have parameters
name:lll
age:18
score:99
name:sss
age:1
score:2
~~~~~~one~~~~~~~~~~~~~
copy construction function
name:lll
age:18
score:99
~~~~~~~~~tow~~~~~~~~~~
Stu no parameters
copy assignment function
name:lll
age:18
score:99
~~~~~~~~three~~~~~~~~~~~
Stu no parameters
this is operator overload +
copy construction function
name:lllsss
age:19
score:101
~~~~~~~four~~~~~~~~~~~~
name:ssslll
age:19
score:101
~~~~~~~~~~five~~~~~~~~~
this is > operator function
bool:0
destructor function
destructor function
destructor function
destructor function
destructor function
destructor function

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于RK3399+FPGA的地面测试台多参数数据记录仪方案(一)硬件设计

地面测试台属于某型号数据记录仪的配套测试设备&#xff0c;主要工作包括&#xff1a;飞行前对记录 仪的功能检查&#xff0c;测试其工作状态和稳定性&#xff1b;实验结束后对已存储到记录仪中的数据进行 回读和进一步处理&#xff0c;通过数据分析得出导弹各项参数在飞行试…

苹果的首款“头显设备”Vision Pro在短期内必将被Meta Quest超越

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;Vision Pro是苹果在今年的WWDC2023开发者大会上发布的一款结合了增强现实(AR)和虚拟现实(VR)的“头显设备”&#xff0c;Vision Pro 的最终售价高达 3499 美元&#xff08;约合…

观察级水下机器人使用系列之二多普勒速度记录仪(DVL)

本文主要讲述观察级水下机器人所使用的多普勒速度记录仪器&#xff08;DVL&#xff09;&#xff0c;见下图。多普勒测速技术自1960年开始研究&#xff0c;1980年开始实现商业化&#xff0c;80年代中后期&#xff0c;窄带多普勒测速技术研究已日趋成熟&#xff0c;90年代以后&am…

初学者应该怎么学git-上

初学者应该怎么学git-上 Git 下载&安装 官网 地址: https://git-scm.com/ 下载版本: Git-2.33.0.2-64-bit.exe 下载慢&#xff0c;可以到镜像下载: http://npm.taobao.org/mirrors/git-for-windows/ 卸载 说明&#xff1a;如果安装过&#xff0c;可以卸载和老师版本…

详解Java中static的使用及其注意事项

1.可以用来修饰的结构&#xff1a; 主要用来修饰类的内部结构 属性、方法、代码块、内部类 2.static修饰属性&#xff1a;静态变量&#xff08;或类变量&#xff09; ​ 2.1 属性&#xff0c;是否使用static修饰&#xff0c;又分为&#xff1a;静态属性 vs 非静态属性(实例…

Yolov5更换上采样方式( 最近邻 / 双线性 / 双立方 / 三线性 / 转置卷积)

原文地址: https://www.iotword.com/3138.html 1. 常用上采样方式介绍 1. 1 最近邻插值(Nearest neighbor interpolation) >>> input torch.arange(1, 5, dtypetorch.float32).view(1, 1, 2, 2) >>> input tensor([[[[ 1., 2.],[ 3., 4.]]]])>>&g…

【goframe】(4):使用goframe 接入grpc服务,非常的方便,可以简单的构建和生成服务代码,并且启动方法也特别简单,使用代码本地调用成功

目录 前言1&#xff0c;关于grpc微服务2&#xff0c;修改生成代码3&#xff0c;相关的goframe的grpc配置4&#xff0c;总结 前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 未经博主允许不得转载。 博主CSDN地址是&#xff1a;https://b…

3.变量|Java学习笔记

文章目录 数据类型整型的类型浮点型的类型字符类型boolean类型 基本数据类型转换自动类型转换强制类型转换 基本数据类型和String类型的转换 变量 变量名 值 数据类型 https://www.matools.com/# 数据类型 整型的类型 浮点型的类型 关于浮点数在机器中存放形式的简单说明&…

Ibatis与Mybatis的区别—侧重于Ibatis

目录 一、什么是Ibatis&#xff1f; 1、iBatis是一款轻量级的持久化框架 2、iBatis最大的特点是将SQL语句与Java代码分离 3、iBatis具有以下几个关键组成部分&#xff1a; 二、Ibatis与Mybatis的区别 1、基本信息不同 2、开发时间不同 3、配置方法不同 三、Ibatis与My…

HotSpot虚拟机垃圾回收算法及收集器

目录 一、对象引用 二、堆区和方法区回收 1. 堆区回收 2. 方法区回收 三、垃圾回收算法 1. 算法总结 2. 算法相关细节 四、垃圾收集器 1. 新生代收集器 2. 老年代收集器 3. 混合式收集器G1 4. 低延迟收集器 五、参考资料 一、对象引用 判定对象是否存活和引用离…

Unix/Linux编程:Unix domain socket

〇、前言 socket 是一种 IPC &#xff08;Inter-Process Communication&#xff0c;进程间通信&#xff09;方法&#xff0c;它允许位于同一主机&#xff08;计算机&#xff09;或使用网络连接起来的不同主机上的应用程序之间交换数据。通过使用Socket&#xff0c;开发人员可以…

在VSCode中使用LaTex,语法检测插件grammarly

整个文章分为以下几个内容&#xff0c;打 * 的是必须要安装的 LaTex 安装*VSCode 安装*在 VSCode 中配置 LaTexGrammarly语法检测插件 LaTex 安装* latex的下载安装可参考&#xff1a;LaTex&#xff08;2021&#xff09;安装教程 VSCode 安装* VSCode下载&#xff1a;VSCo…

带你用WePY框架提升开发效率

在小程序开发中&#xff0c;提高开发效率、优化代码质量和增强用户体验是每位开发者都追求的目标。而wepy作为一种基于Vue.js的小程序开发框架&#xff0c;提供了更好的开发体验和更高效的开发方式。本文将介绍wepy的基本功能和特性&#xff0c;分享一些实际的代码案例&#xf…

图像的匹配

2023.6.7 图像的匹配 模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。为此&#xff0c;OpenCV 带有一个函数 cv.matchTemplate()。它只是在输入图像上滑动模板图像&#xff08;如在 2D 卷积中&#xff09;&#xff0c;并比较模板图像下的模板和输入图像的补丁。在…

STM32——CAN通信

1、CAN通信概述 STM32F103有两个CAN&#xff0c;都分别有自己的发送接收邮箱。 发送邮箱共有3个来发送报文&#xff0c;发送调度器根据优先级决定哪个邮箱的报文先被发送。 共有2个接收FIFO&#xff0c;每个FIFO都可以存放3个完整的报文。它们完全由硬件来管理。 CAN通信通过…

Mujoco 控制器接口(四)

目录 .1 简介 1.1 控制器实现 .2 sim.step() .3 实例 References .1 简介 control看到下面的图中就是mjtNum类型 mjtNum实际上就是浮点数 ctrl是底层的输入 外界扰动就是通过上图的qfrc和xfrc来添加的 1.1 控制器实现 实际上加上控制器就是xml里添加actuator joint就是…

算法提高-图论-单源最短路的建图方式

单源最短路的建图方式 单源最短路的建图方式AcWing 1129. 热浪AcWing 1128. 信使AcWing 1127. 香甜的黄油AcWing 1126. 最小花费AcWing 920. 最优乘车AcWing 903. 昂贵的聘礼 单源最短路的建图方式 AcWing 1129. 热浪 #include <iostream> #include <cstring>usi…

安装OpenWrt到电脑,安装包选哪个?

https://downloads.openwrt.org/releases/22.03.5/targets/x86/ releases发行&#xff0c;targets目标&#xff1b; —————————————— 64&#xff1a;具有64位功能的计算机&#xff1b; generic&#xff1a;一般的&#xff0c;通用的&#xff0c;仅32位计算机&…

学习Vue这一个就够

1、淘宝镜像 1: 解释一下 npm 为什么要配置淘宝镜像原因&#xff1a;因为node.js 默认使用的是国外的网站 。国内访问有一个跨国内局域网的操作。所以就会有时候很慢。这就跟为什么网站的静态资源有些会使用CDN 加速一样的淘宝镜像是什么&#xff1f;就是npm 很多的插件淘宝已经…

docker cgroub

docker 的资源管理 1、cpu的资源控制 一&#xff1a;设置cpu的资源上限 cd /sys/fs/cgroup/cpu/docker/ cpu 的占用量达到100% cpu 设置一半50% 2. 设置cpu资源占用比&#xff08;设置多个容器才有用&#xff09; docker run -itd --name c3 --cpu-shares 512 centos:7 do…