网站建设不用备案的,美容公司网站什么做才好,建设公司企业logo,网页设计公司宣传想用机器人赋能未来#xff0c;少不了扎实的编程的基本功#xff0c;让我们跟着清华大学的C语言程序设计课程一起过一遍C的语法知识吧#xff01;当定义基本类型的变量时#xff0c;经常会用已有的变量去初始化新定义的变量#xff0c;当定义对象的时候也有类似的需求少不了扎实的编程的基本功让我们跟着清华大学的C语言程序设计课程一起过一遍C的语法知识吧当定义基本类型的变量时经常会用已有的变量去初始化新定义的变量当定义对象的时候也有类似的需求这时候就需要复制构造函数。1复制构造函数复制构造函数是一种特殊的构造函数其形参为本类的对象引用。作用是用一个已存在的对象去初始化同类型的新对象。Class 类名{Public:类名(形参)//构造函数类名(const 类名 对象名)//复制构造函数};类名::类(const 类名 对象名)//复制构造函数的实现{函数体}复制构造函数被调用的三种情况一、定义一个对象时以本类另一个对象作为初始值发生复制构造二、如果函数的形参是类的对象调用函数时将使用实参对象初始化形参对象发生复制构造三、如果函数的返回值是类的对象函数执行完成返回主调函数时将使用return语句中的对象初始化一个临时的无名对象传递给主调函数此时发生复制构造。隐含的复制构造函数如果程序员没有为类声明拷贝初始化构造函数则编译器自己生成一个隐含的复制构造函数。这个构造函数执行的功能是用初始值对象的每个数据成员初始化将要建立的对象的对应的数据成员。如果不希望对象被复制构造C98做法将复制构造函数声明为private并且不提供函数的实现。C11做法用”delete”指示编译器不生成默认复制构造函数。例Class Point {//Point 类的定义public:Point(int xx0,int yy0){ x xx;yyy;}Point(const Pointp)delete;//指示编译器不生成默认复制构造函数private: int x,y;};下面对以上三种情况举例说明输出结果输出结果输出结果2析构函数完成对象被删除前的一些清理工作在对象的生存期结束的时候系统自动调用析构函数。如果程序中未申明析构函数编译器将自动产生一个默认的析构函数其函数体为空。析构函数的原型 ~类名();析构函数没有参数没有返回类型。析构函数完成了什么功能第一部分是写在~类名(){}的大括号里面的内容这部分由程序员操作一般执行以下几点。释放内存。delete或者free所有在这个对象生存期间产生的堆内存释放句柄。如各种文件(FILE *)、窗口(HANDLE)等catch所有的异常(调用的函数有可能产生异常)不可以让异常逃离析构函数。