c++day4 ——homework

这篇具有很好参考价值的文章主要介绍了c++day4 ——homework。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.思维导图

c++day4 ——homework

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文章来源地址https://www.toymoban.com/news/detail-475226.html

到了这里,关于c++day4 ——homework的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《操作系统导论》吐血万字整理 - 附下载地址及思维导图

    我看的是这本,豆瓣9.4,很经典的教材书, 在文章末尾我附上了网盘链接 这篇博客算是一个完整的读书笔记,我大概读了20天看完的,电子版做笔记很方便,推荐一波,很多课上没有讲到的知识在这本书里都详细阐释了 全书的思维导图 一个正在运行的程序会做:取址执行。

    2023年04月19日
    浏览(32)
  • 《信息系统项目管理师教程(第4版)》第17章 采购管理、合同管理 知识点整理,xmind思维导图

    已上传采购管理xmind思维导图,需要的同学可以直接下载哦。 签订 履行 变更 档案,合同档案管理是整个合同管理的 基础 ,要求采用电脑打印文本,手写的旁注和修改等不具法律效力。(签订合同后做出的修改) 违约索赔 合同解释原则 主导语言原则 适用法律原则 整体解释

    2024年02月10日
    浏览(34)
  • c++ ——day1 homework

    1.整理思维导图 2.有以下定义,哪些变量可以改变 const和*的位置,const在前,里面的值不能动*p,地址可以动p                             const在后,地址不能动,值可以动 const char *p:内容不可变,地址可变 const (char*)p: 内容不可变,地址可变 char *const p:内容可变,

    2024年02月08日
    浏览(39)
  • 思维导图怎么做?一份完整的思维导图绘制教程来了!

    在信息爆炸的时代,如何高效地整理和消化信息是每个人都需要面对的问题。思维导图作为一种能够高效组织和呈现信息的工具,凭借其直观、易理解的特性,备受学生、教师、企业管理者、商业团队等许多人的青睐。那么,如何制作思维导图呢?让我们一起来看看。 思维导

    2024年02月15日
    浏览(23)
  • Python教程(23)——Python类中常用的特殊成员

    在Python中,类特殊成员是指以双下划线开头和结尾的属性和方法,也被称为魔术方法(Magic methods)或特殊方法(Special methods)。这些特殊成员在类的定义中具有特殊的语法和功能,用于实现对象的特定行为和操作。 特殊方法一般由Python解释器调用,无需手动调用。通过在类

    2024年02月02日
    浏览(41)
  • 操作系统思维导图

    复习提纲 1.操作系统的作用 1.用户和计算机硬件系统之间的接口 2.计算机系统资源的管理者 3.实现对计算机资源的抽象 2.操作系统的种类 1.单道批处理系统 2.多道批操作系统 3.分时系统 4.实时系统 3.操作系统的基本特性 1.并发 2.并行 3.共享 1.互斥访问 2.同时访问 4.虚拟 5.异步

    2024年02月07日
    浏览(28)
  • Ribbon学习思维导图

    参考资料 1、OpenFeign与Ribbon源码分析总结与面试题 2、万字剖析OpenFeign整合Ribbon实现负载均衡的原理 3、扒一扒Nacos、OpenFeign、Ribbon、loadbalancer组件协调工作的原理 4、OpenFeign原来是这么基于Ribbon来实现负载均衡的

    2024年02月03日
    浏览(43)
  • 高等数学(下)思维导图

    2024年02月11日
    浏览(44)
  • vue实现思维导图

    介绍 前景: 仿幕布实现思维导图效果 技术实现: jsmind 完整代码 :vue-jsmind 参考文章: 在vue中使用jsmind组织架构或思维导图 实现效果: 功能描述: 编辑、删除、插入、拖拽、展开/收起节点 分布结构切换(向左、向右和两边分布) 节点类型筛选 导出图片 鼠标左键拖拽 缩

    2023年04月13日
    浏览(47)
  • 英语语法基础--思维导图

    思维导图通常用于可视化和整理信息,而英文语法非常广泛且复杂,无法在一个简单的思维导图中完整表示。然而,我可以提供一个简化版本的英文语法思维导图,列出一些主要的语法概念和部分示例。 请注意,这只是一个基本的概述,英文语法要复杂得多。以下是思维导图

    2024年02月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包