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)

大家都在看

  • .Net Core下DllImport使用方法及扩展

    引言​ 在有时候的开发过程中,我们会遇到需要调用系统的API,不巧的是.Net Core可能没办法为我们提供相关的调用方式。那需要如何才能解决这个问题呢?​ 这时候我们就可能会考虑…

    Linux 2023年6月13日
    088
  • 运算符重载和深浅拷贝

    对于某些运算符号(+,-,,/….),我们不满足与它原有的操作方式,而是要在对 特有对象(如负数的加减)进行使用,但是编译器会不允许这样做,因为会与操作符 原本的类型不…

    Linux 2023年6月7日
    0100
  • [ Perl ] 多线程 并发编程

    记录一些常用的 模块 / 方法 。 多线程 use 5.010; use threads; 定义一个需要并发的子函数 sub func { my $id = shift; slee…

    Linux 2023年6月7日
    092
  • Go实现安全双检锁的方法和最佳实践

    不安全的双检锁 从其他语言转入Go语言的同学经常会陷入一个思考:如何创建一个单例? 有些同学可能会把其它语言中的双检锁模式移植过来,双检锁模式也称为懒汉模式,首次用到的时候才创建实…

    Linux 2023年6月13日
    099
  • Python——装饰器(Decorator)

    1.什么是装饰器? 装饰器放在一个函数开始定义的地方,它就像一顶帽子一样戴在这个函数的头上。和这个函数绑定在一起。在我们调用这个函数的时候,第一件事并不是执行这个函数,而是将这个函…

    Linux 2023年6月8日
    0147
  • VMware vSphere 7 Update 3 下载

    请访问原文链接:https://sysin.org/blog/vmware-vsphere-7-u3/,查看最新版。原创作品,转载请保留出处。 vSphere 7 Update 3…

    Linux 2023年5月27日
    0116
  • 原来这就是网络

    你是一台电脑,你的名字叫A,很久很久之前,你不与任何其他电脑相连接,孤苦伶仃。 直到有一天,你希望与另一台电脑B建立连接,于是你们各开了一个网口,用一根网线连接了起来。 用一根网线…

    Linux 2023年6月14日
    0116
  • powershell 运行带路径的exe

    &"C:\Program Files\Python38\python.exe" demo_view.py 起因是nodejs16安装时,顺带装了pyth…

    Linux 2023年5月28日
    093
  • 5.4 Linux Vim基本操作

    《Vim三种工作模式》一节给大家详细介绍了 Vim 的 3 种工作模式,本节来学习如何使用 Vim 编辑文件。 首先学习如何使用 Vim 打开文件。 Vim 打开文件 使用 Vim…

    Linux 2023年6月7日
    0105
  • springBoot 获取注解参数的原理

    判断每个参数带有注解是哪个,是否存在相应的解析器 寻找合适的处理适配器 DispatcherServlet中的 doDispatch方法 // Determine handler …

    Linux 2023年6月7日
    0103
  • pyQt中的信号

    1. 说明 在调用 exec_()方法时,应用会进入主循环,而主循环会监听、处理事件 import sys from PyQt5.QtCore import Qt from PyQ…

    Linux 2023年6月7日
    093
  • js中对象深度拷贝的方法(浅拷贝)

    JS中,一般的赋值传递的都是对象/数组的引用,并没有真正的深拷贝一个对象(浅拷贝),某些情况下需要用到深度拷贝,可以使用如下写法 let data = {username:&quo…

    Linux 2023年6月14日
    0105
  • 【电子取证:抓包篇】Fiddler 抓包配置与数据分析(简)

    Fiddler 抓包配置与分析(简) 简单介绍了Fiddler抓包常用到的基础知识,看完可以大概明白怎么分析抓包数据 —【suy999】 Fiddler 抓包工具,可以…

    Linux 2023年6月13日
    0110
  • 系统初始化

    一般系统安装好后,按照自己习惯定义 csharp;gutter:true;</p> <h1>alias</h1> <p>echo &…

    Linux 2023年6月7日
    060
  • CMU15-445 数据库导论 Storage02 其他存储方式

    CMU15-445 数据库导论 Storage02 其他存储方式 1. 参考资料: [1] CMU15-445:Database Systems [Andy Pavlo] http…

    Linux 2023年6月6日
    0115
  • 快速掌握 Base 64 | Java JS 密码系列

    Java 密码系列 – Java 和 JS Base 64 Base 64 不属于密码技术,仅是编码方式。但由于在 Java、JavaScript、区块链等出现的频率较…

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