C++复制构造函数,类型转换构造函数,析构函数,引用,指针常量和常量指针

复制构造函数
形如className :: className(const &) / className :: className(const className &)后者能以常量对象作为参数
如不写复制构造函数,则编译器默认提供,为了完成对象的复制功能

它起作用有三个工作环境:

1.一个对象初始化另一个同类的对象

2.如果某函数有一个参数是类的一个对象,那么该函数被调用时,类的复制构造函数被调用

3.如果函数的返回值是类的对象时,则函数返回是,类的复制构造函数被调用

注意:对象间的 赋值不导致复制构造函数的调用

A c1,c2;
c2 = c1 ;//不会调用
A C3(C1);//这是初始化操作,会调用赋值构造函数

在函数参数列表中,为节省开销,不引发复制构造函数的调用,使用ClassName & 引用类型为参数,
又为了确保实参值不变,再在引用前加上const关键字。复制构造函数往往加const和&,具体可以点这里

类型转换构造函数

它的目的是实现类型的自动转换,并且只有一个参数。当需要的时候,编译系统会自动调用转换构造函数,建立

一个无名的临时对象(或临时变量)。

析构函数:~类名(){}

它没有返回值和参数,一个类对应一个析构函数,在类的对象消亡时自动调用,也可以手动调用进行对象消亡的善后工作。如果懒的去写,编译器自动会生成缺省析构函数,但是什么也不做,如果写了,就不自动生成了。

在对一个对象进行delete时,调用一次析构函数,在delete[]对象数组时,会调用n次析构函数,取决于数组大小。此外:

new出来的对象或对象数组,不delete就不会消亡,就不会调用析构函数!!不是new出来的,则在生命期结束会自动调用

关于 引用:引用是C++有的,C所没有的,标志为 &,即C的取地址符。它的声明为这样

其中 r和n指向同一片地址空间 ,对 r和n的修改都会改变原来是4的那个值,相当于 为n取了个别名r

在定义引用时一定要将其初始化成引用某个变量。并且之后不会引用别的变量
只能引用变量,不能引用常量和表达式

一个简单而又形象的,见得次数很多的例子: 交换元素

引用还可以作为函数的 返回值

关于 常引用

int n;
const int & r = n;
r = 10;//error 不能通过 常引用r改变n的值
n = 30;// n的值可以变化
const T & 和T & 是不同的类型!!!
T & 类型的引用T类型的变量可以用来 初始化const T & 类型的引用
int n = 8;
int & r1 = n;
const int r2 = r1;//初始化const T & 类型的引用。
const T 类型的常变量和const T & 类型的引用则不能用来初始化T &类型的引用,
除非进行强制类型转换

常量指针

指针常量

这两个不要搞混淆了。。。。

简单的记忆,抓住第一个是常量在前,就意味着整个后面的地址内容是个常量,不可以通过指针去修改它,但是指向谁是可以变的;指针常量,这个常量在指针后面,表明这个指针所指向的地址不能变了,但你可以用它修改地址所对应的内容。。

动态内存分配:

变量: int * px = new int; //大小为sizeof(int)
数组: int * pn = new int[20];
释放动态分配的内存:
int * px = new int;
delete px;// 只能删除一次
//数组
int * pn = new int[20];
delete [] pn;

Original: https://www.cnblogs.com/ygsworld/p/11260824.html
Author: 回忆酿的甜
Title: C++复制构造函数,类型转换构造函数,析构函数,引用,指针常量和常量指针

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582146/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 最新超详细Linux下LNMP环境搭建

    一、了解LNMP系统 当前两个主要应用的架构:LNMP和LAMP,都是指一组通常一起使用来运行动态网站或者服务器的自由软件名称。 LAMP的全称是:Linux + Apache +…

    Linux 2023年6月15日
    0139
  • 一篇文章Shell脚本快速入门

    Shell脚本基础入门 Bash注释 Bash只支持单行注释,使用 #开头的都被当作注释语句: 整行注释 echo hello world # 行尾注释 通过Bash的一些特性,可…

    Linux 2023年5月28日
    067
  • JuiceFS 新手必知 24 问

    JuiceFS 是一个创新性的软件产品,很多初次尝试的小伙伴对产品和用法感到很多疑惑,所以为了帮助大家快速理解并上手 JuiceFS,我们整理了24个关于 JuiceFS 经典的问…

    Linux 2023年6月14日
    098
  • oracle ORA-31655

    原因:是因为不是同一个schema,导致的问题产生 解决方案: 在导入语句最后添加上remap_schema=old:new 着old是原schema,也就是导出的用户名,new是…

    Linux 2023年6月8日
    074
  • WEB自动化-11-数据驱动

    11 数据驱动 数据驱动是测试框架中一个非常好的功能,使用数据驱动,可以在不增加代码量的情况下生成不同的测试策略。下面我们来看看在Cypress中的数据驱动使用方法。 11.1 数…

    Linux 2023年6月7日
    0110
  • 使用Kotlin协程配合Retrofit发送请求

    Retrofit2.6开始增加了对Kotlin协程的支持,可以通过suspend函数进行异步调用。本文简单介绍一下使用Kotlin协程配合Retrofit使用,发起网络请求。 ap…

    Linux 2023年6月8日
    096
  • LVM 逻辑卷管理 Logical Volume Management

    管理磁盘、使用磁盘的一种方式的称呼 优势: 1、在不影响数据的情况下, 扩容、缩容 2、支持快照功能, 方便数据备份 LVM工作流程: 磁盘/分区 —> pv(物…

    Linux 2023年6月7日
    0112
  • Ansible Playbook概览

    Ansible playbook 执行需要三步路执行: 1.编写playbook 2.定义主机清单文件 3.设置运行环境,写入配置文件 1.编写playbook Playbook使…

    Linux 2023年6月6日
    073
  • [ Terminal ] 在 Windows Terminal 中使用 Git Bash

    https://www.cnblogs.com/yeungchie/ Git 自带的 git-bash 太简陋了,ConEmu 又太卡了,还是这个 Windows Terminal…

    Linux 2023年6月7日
    097
  • MIT6.828——Lab1 partA(麻省理工操作系统课程实验)

    Lab1 基本部分 在实验给出的文档中,已经详说明了早期PC的内存布局,并且运行了 bootloader。详细地解释了,上电后BIOS所做的工作,因此这部分不再赘述。需要注意的是 …

    Linux 2023年5月27日
    0157
  • 《Redis开发与运维》——(九)哨兵(脑图)

    posted @2021-01-09 15:09 雪山上的蒲公英 阅读(181 ) 评论() 编辑 / 返回顶部代码 / Original: https://www.cnblogs…

    Linux 2023年5月28日
    097
  • Timeout connecting to [localhost/127.0.0.1:9200]

    空服务启动时(或者压根没引入es相关jar包)报Timeout connecting to [localhost/127.0.0.1:9200]错误时,查看pom.xml中是否引用…

    Linux 2023年6月7日
    0118
  • 时钟周期,机器周期和指令周期

    有些概念没有搞清楚,基础不牢呀。 保持更新;https://github.com/yaowenxu posted @2022-02-16 16:18 xuyaowen 阅读(42 …

    Linux 2023年6月14日
    087
  • Celery + Redis 的探究

    不在乎过程的,可以直接看最后的结论。 测试代码: 先将 redis 部署于本机的 6379 默认端口 不要设置密码,使用 celery 版本 3.1.23 [1]先直接发起一个 t…

    Linux 2023年5月28日
    066
  • POJ1861(Network)-Kruskal

    题目在这 Sample Input 4 6 1 2 1 1 3 1 1 4 2 2 3 1 3 4 1 2 4 1 Sample Output 1 4 1 2 1 3 2 3 3 …

    Linux 2023年6月7日
    075
  • vscode配置指南,美化技巧

    "workbench.colorCustomizations": { "editor.selectionBackground": &quot…

    Linux 2023年6月14日
    083
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球