想用机器人赋能未来,少不了扎实的编程的基本功,让我们跟着清华大学的C++语言程序设计课程一起过一遍C++的语法知识吧!

当定义基本类型的变量时,经常会用已有的变量去初始化新定义的变量,当定义对象的时候也有类似的需求,这时候就需要复制构造函数。

1复制构造函数

复制构造函数是一种特殊的构造函数,其形参为本类的对象引用。作用是用一个已存在的对象去初始化同类型的新对象。

Class 类名{Public:类名(形参);//构造函数类名(const 类名 &对象名);//复制构造函数};类名::类(const 类名 &对象名)//复制构造函数的实现{函数体}

复制构造函数被调用的三种情况

  • 一、定义一个对象时,以本类另一个对象作为初始值,发生复制构造;

  • 二、如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造;

  • 三、如果函数的返回值是类的对象,函数执行完成返回主调函数时,将使用return语句中的对象初始化一个临时的无名对象传递给主调函数,此时发生复制构造。

  • 隐含的复制构造函数

如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个隐含的复制构造函数。

这个构造函数执行的功能是:用初始值对象的每个数据成员,初始化将要建立的对象的对应的数据成员。

如果不希望对象被复制构造

C++98做法:将复制构造函数声明为private,并且不提供函数的实现。

C++11做法:用”=delete”指示编译器不生成默认复制构造函数。

例:

Class Point {//Point 类的定义public:Point(int xx=0,int yy=0){ x = xx;y=yy;}Point(const Point&p)=delete;//指示编译器不生成默认复制构造函数private: int x,y;};

下面对以上三种情况举例说明

输出结果

输出结果

输出结果

2析构函数

完成对象被删除前的一些清理工作

在对象的生存期结束的时候系统自动调用析构函数。

如果程序中未申明析构函数,编译器将自动产生一个默认的析构函数,其函数体为空。

析构函数的原型

~类名();

析构函数没有参数,没有返回类型。

析构函数完成了什么功能:

第一部分,是写在~类名(){}的大括号里面的内容,这部分由程序员操作,一般执行以下几点。

  • 释放内存。delete或者free所有在这个对象生存期间产生的堆内存;

  • 释放句柄。如各种文件(FILE *)、窗口(HANDLE)等;

  • catch所有的异常(调用的函数有可能产生异常),不可以让异常逃离析构函数。

frontcon函数用不了_C++复制构造函数与析构函数相关推荐

  1. 复制构造函数与析构函数

    复制构造函数: 复制构造函数是一种特殊的构造函数,其形参为本类的对象引用,作用是用一个已存在的对象去初始化同类型的新对象 如果没有为类声明拷贝初始化构造函数,则编译器自己生成一个隐含的复制构造函数,这 ...

  2. 复制构造函数 与 赋值函数 的区别

    构造函数.析构函数.赋值函数是每个类最基本的的函数.每个类只有一个析构函数和一个赋值函数.但是有很多构造函数(一个为复制构造函数,其他为普通构造函数.对于一个类A,如果不编写上述四个函数,c++编译器 ...

  3. 复制构造函数(拷贝构造函数)

    也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生.对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什 ...

  4. c ++函数功能查询器_C ++ 17新功能和技巧

    c ++函数功能查询器 目录 (Table of Contents) Introduction 介绍 Settings an integrated development environment (I ...

  5. 【C++】构造函数与析构函数

    1. 概述 构造函数:用于初始化对象,没有返回值,函数名和类名相同,只有在对象初始化的时候才会被调用.构造函数的分类: 默认构造函数:是编译器自动生成,没有任何参数的构造函数. 有参构造函数:如果只一 ...

  6. c++ 复制构造函数_C++学习刷题8--复制构造函数和赋值运算符重载函数

    一.前言 本部分为C++语言刷题系列中的第8节,主要讲解这几个知识点:复制构造函数和赋值运算符重载函数.欢迎大家提出意见.指出错误或提供更好的题目! 二.知识点讲解 知识点1:复制构造函数 1.当依据 ...

  7. 实现函数克隆_哪个更好的选择:克隆或复制构造函数?

    实现函数克隆 这就是我开始撰写本文的方式. 我已经读过很多次这样的声明: "当对象引用可变的最终字段时,克隆变得很困难." 每次我在Google上搜索它时,都要了解它的确切含义,并 ...

  8. C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)

    转载自:http://blog.csdn.net/jofranks/article/details/17438955 版权声明:本文为博主原创文章,未经博主允许不得转载. 在C++中,有三大函数复制控 ...

  9. 构造函数和复制函数java_用Java复制构造函数

    构造函数和复制函数java Copy Constructor in java class is a special type of constructor that takes same class ...

最新文章

  1. Effective_STL 学习笔记(四十三) 尽量用算法调用代替手写循环
  2. 30幅非常精美的海景摄影作品欣赏
  3. Matlab:成功解决 Inner matrix dimension must agree
  4. java web api 版本控制_怎么做 Web API 版本控制?
  5. 15岁杀人犯监狱学编程,37岁保释年薪70万
  6. 【转】小白级的CocoaPods安装和使用教程
  7. ASP.NET Core 应用发布与部署指南
  8. [原译]实现IEnumerable接口理解yield关键字
  9. SolidWorks2020无法获得下列许可SOLIDWORKS Standard.Server节点已经关闭或是没有响应。(-96,7,11003)
  10. 软件开发项目中如何进行风险管理
  11. oracle临时表的创建
  12. php 测试网站打开速度,JS如何测试目标网站的打开响应速度
  13. 命令行解析模块 以及 metavar 和dest的理解
  14. CCNP-OSPF中SPF(最短路径树)算法剖析,建树过程示例
  15. Angular快速上手
  16. Unity给手加入圆柱骨骼
  17. Cocos2d-x的学习之旅(七)更新函数Update
  18. 你应该看得懂的RecyclerView嵌套
  19. Mybatis的bind标签
  20. [R] R语言for循环机制

热门文章

  1. Go语言通过odbc驱动连接华为高斯数据库
  2. mda.helper.php,dedecms后台更新缓慢甚至卡死怎么办
  3. java 类型转换 安全_JAVA 类型转换指令
  4. redis springmvc mysql_redis和mysql怎么一起在springmvc里面
  5. php7引用计数,PHP7 引用计数 读书笔记
  6. 巨潮网怎么下载年报_上市公司年报(或财务报表)在哪里下载?
  7. idea的maven project消失解决方案
  8. Android 高德地图在清除所有Marker,清除某一个MarKer
  9. Android RecyclerView 向上偏移解决、添加自定义分割线,瀑布流,ScrollView嵌套RecyclerView滑动卡顿
  10. java调用kafka