2.【CPP】入门(宏||内联函数||拷贝构造||析构函数||构造函数)

0x01.引言

1.实现一个宏函数ADD

#define ADD(x,y) ((x)+(y))//宏是预编译阶段完成替换,注意括号

2.宏的优缺点

优点:
1.增强代码的复用性
2.宏函数不用建立栈帧,提高性能
缺点:
1.不方便调试
2.没有安全检查

0x02.内联函数

1.以空间换时间,减少了函数调用栈帧的开销
2.内联函数只是对编译器的建议
3.短小的函数建议定义为内联,而递归循环不建议
4.inline不建议声明和定义分离,inline是一种“用于实现的关键字”,而不是“用于声明的关键字”。(直接在.h文件中定义)
5.inline函数是不进符号表的

上链接知乎大佬

0x03.类和对象

1.this指针

1.1C++给每个非静态成员函数增加了一个隐式的指针参数,即this指针,让该指针指向当前对象,在函数体中所有成员变量的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要传递,编译器自动完成.
1.2.this指针的特性

2.默认成员函数

2.1构造函数

class Date
{public:// 1.无参构造函数Date(){}// 2.带参构造函数Date(int year, int month, int day){_year = year;_month = month;_day = day;}private:int _year;int _month;int _day;
};

1.函数名与类名相同,无返回值,对象实例化时编译器自动调用构造函数,可以重载。
2.如果类中没有显示定义构造函数,则c++编译器会自动生成一个无参的默认构造函数,一旦用户显示定义编译器将不再生成。对于自定义类型会调用其的默认成员函数。(C++11允许内置类型成员变量在声明时给默认值)
3.无参的构造函数和全缺省的构造函数和编译器自己生成的都称为默认构造函数,并且默认构造函数只能有一个。注意:无参构造函数、全缺省构造函数、我们没写编译器默认生成的构造函数,都可以认为是默认构造函数。

Date()
{
_year = 1900;
_month = 1;
_day = 1;
}
Date(int year = 1900, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}

2.2析构函数

对象销毁时会自动调用析构函数,完成对象中资源的清理工作
和构造函数差不多,如果未显示定义,会自动生成默认的析构函数。对内置类型不做处理,如果有自定义类型,则会调用对应的析构函数。

2.3拷贝构造

1.拷贝构造实际上是构造函数的重载形式
2.拷贝构造的参数只有一个且必须使用传引用传参,使用传值方式会引发无穷递归

class Date
{
public:Date(int year = 1900, int month = 1, int day = 1)//构造函数{_year = year;_month = month;_day = day;}Date(Date d){_year = d._year;_month = d._month;_day = d._day;}
private:int _year;int _month;int _day;
};
int main()
{Date d1;Date d2(d1);return 0;
}

如上面的传值拷贝就会报错
在这里插入图片描述
原因:用d1对象构造d2,要去调用拷贝构造函数,因为是传值调用,我们要把d1赋值给形参d,再次调用拷贝构造函数,因为参数会拷贝一份实参,调用了d的拷贝构造函数,需要把参数传给d,而此时传给d又要调用拷贝构造函数,如此反复,从而发生无限递归。
在这里插入图片描述

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

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

相关文章

漫画演绎策略设计模式

引言 本篇主要通过一小篇漫画的形式给大家讲讲策略模式,由于策略模式本身不是很难,这里就不花太多的言辞描述了,一起看漫画吧 普通设计 从前有一个妈妈,她有一个叛逆的儿子,妈妈每天除了上下班就是要教育儿子&#…

闩锁效应(Latch-up)

闩锁效应(Latch-up)原理解析 什么是闩锁效应(Latch-up)? 在CMOS N阱设计中,实际上是由于CMOS电路中基极和集电极相互连接的两个PNP和NPN双极性BJT管子(下图中,侧面式NPN和垂直式PNP)的回路放大…

从无到有:AI绘画API在插画与游戏设计中的应用

引言 随着人工智能技术的快速发展,AI绘画API已经逐渐成为插画和游戏设计领域的新宠。这些API能够将创意与技术完美结合,帮助设计师快速生成高质量的图像,为插画和游戏产业带来了巨大的变革。 AI绘画API的工作原理 AI绘画API基于深度学习和…

Groove闭包

Groovy闭包 - 简书# 闭包 闭包的基础知识 闭包的使用 闭包 this,owner,delegate 的理解 总结 ## 闭包的基础知识 闭包就是一段可以使用参数的代码片段,每个闭包会被编译成...https://www.jianshu.com/p/c73b03cdf986

RK3399平台入门到精通系列讲解(驱动篇)eventpoll结构体详解

🚀返回总目录 文章目录 一、eventpoll 结构体二 、epitem 结构体三、eppoll_entry 结构体eventpoll 结构体:eventpoll 结构体是 epoll 在内核中的核心结构epitem 结构体:epitem 结构体用于表示 epoll 实例中的事件项eppoll_entry 结构体:它的作用就是关联Socket等待队列中…

全网第一篇教你怎么总结多线程知识

于「全景图」,我之前也有一直在构建,可是因为知识储备不够,确实很难构建出来。稍微了解过并发领域知识的人都知道,里面的知识点、概念多而散:线程安全、锁、同步、异步、阻塞、非阻塞、死锁、队列(为什么并发要跟队列扯…

Springboot+vue的毕业论文管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的毕业论文管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的毕业论文管理系统,采用M(model&…

313.4.56、313.4.80、313.4.107、313.4.112电比例变量马达放大器

403.0.107、403.1.107、3103.4.12、303.4.28、303.4.55、303.4.56、303.4.80、303.4.107、303.4.112、303.4.160、303.4.250电比例控制变量液压马达; 313.4.12、313.4.28、313.4.55、313.4.56、313.4.80、313.4.107、313.4.112、313.4.160、313.4.250、415.0.250、…

自旋锁和互斥锁的区别

自旋锁和互斥锁的区别_自旋锁和互斥锁有什么区别?-CSDN博客

从学习投研流程的角度学习Qlib

许多同学只是把Qlib当做一个简单的工具来学习。其实Qlib隐含了一套正规的投研流程,从投研流程的视角去学习Qlib,则不仅能加深对Qlib的理解,而且能够掌握正确的投研流程,哪怕以后不使用Qlib而是使用其他系统了,这套流程还是适用的。…

Win10下python3和python2同时安装并解决pip共存问题

特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似。 使用python开发,环境有Python2和 python3 两种,有时候需要两种环境切换使用,下面提供详细教程一份。 1、下载…

Copy of 20秒温和漱口,清新口气更抑菌

口腔护理是我们维护自身身体健康里至关重要的一部分。除了每天按时刷牙外,清洁漱口也是日常口腔清洁里非常重要的一步。最近我发现了一款非常新颖且方便实用的漱口产品——清九野深清酶防护漱口云泡。 这款漱口云泡采设计非常巧妙,每瓶85ml,每…