复制构造函数的运用

构造函数和析构函数

一、构造函数:

1、普通构造函数:在对象被创建时利用特定的值构造对象,将对象初始化到一个特定的状态。

特性:构造函数的函数名和类名相同;没有返回值;在对象被创建时被自动调用;如果有构造函数,建立对象时必须给出初始值。

2、复制构造函数(特殊的构造函数)

复制构造函数和赋值运算符的行为差不多,都是将一个对象的值复制给另一个对象;但是复制构造函数是使用一个已经存在的对象去初始化一个同类的新对象而赋值运算符是把对象的值复制给一个已经存在的变量。

复制构造函数在以下三种情况下会被调用:1)用类的一个对象去初始化该类的另一个对象2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时3)函数的返回值是类的对象,函数执行完成返回调用者时。

下面是一个完整覆盖了这三种情况的程序

复制构造函数还可以有选择有变化的复制,可以将复制构造函数可以构造一个与初始点有一定位移的新点(这个我有时间会尝试着写一下)

二、析构函数(作用几乎和构造函数正好相反)

用来完成对象被删除前的清理工作

在对象的生存期即将结束时自动调用;名称由类名前面加“~”构成;没有返回值;不接收任何参数

原文地址:https://www.cnblogs.com/Nicholastwo/p/8687874.html

时间: 2024-08-02 01:50:27

复制构造函数的运用的相关文章

剑指offer 复制构造函数

复制构造函数: A(const A &other){value=other.value;} 也就是传值参数改为常量引用. #include<iostream> using namespace std; class A { private: int value; public: A(int n){value=n;} A(const A &other){value=other.value;} void print(){ cout<<value<<endl;

复制构造函数

// 复制构造函数.cpp : 定义控制台应用程序的入口点.//复制构造函数:类(const 类&对象(随便起))/*Box(const Box&box){length = box.length;width = box.width;height = box.height;}*/ #include "stdafx.h"#include<iostream>using namespace std;class Box{private:    int length; 

C++复制构造函数和赋值符的区别

From  http://blog.csdn.net/randyjiawenjie/article/details/6666937 感谢原作者分享. class CTest{public: CTest(); //构造函数 CTest(const CTest &); //复制构造函数 CTest & operator = (const CTest &); //赋值符}; CTest::CTest(){ cout<<"Constructor of CTest&qu

复制构造函数的调用

1 #include <iostream> 2 using namespace std; 3 4 class Test 5 { 6 public: 7 Test(int n = 1) 8 { 9 val = n; 10 cout << "Con." << endl; 11 } 12 13 Test(const Test& t) 14 { 15 val = t.val; 16 cout << "Copy con."

C++类的复制构造函数和赋值运算符

前言: C++面向对象的编程过程中,凡是在类中运用到动态内存分配的时候总是会写一个显示的复制构造函数和赋值重载运算符,本文将结合C++ Primer Plus一书的内容分析下原因: 一.在C++编程中如果没有编写下列成员函数,系统会自动的提供: (1)构造函数 (2)析构函数 (3)地址运算符 (4)赋值构造函数 (5)赋值运算符 其中(1)-(3)在编程中不会产生什么影响,但是(4)(5)会造成较大的影响 二.赋值构造函数 1.函数原型  Class_name(const Class_name

一段代码引起的对C++构造函数、析构函数,复制构造函数,运算符重载的深度理解

代码和解释: #include "stdafx.h" #include <stdio.h> #include <string> #include <iostream> using namespace std; class test{ int *p; public: test(int value){ p = new int(value); cout<<"Execute Constructor>>"<&l

对象 &amp;&amp; 复制构造函数

复制构造函数必须将形参指定为 const 引用 若复制构造函数写成如下: CBox(CBox initB); 由于是按值传递,所以编译器会首先创建对象的副本,而创建对象的副本需要调用复制构造函数,又会创建新的对象,新对象又会调用复制构造函数 会持续不休,最终得到对复制构造函数的无穷调用. 解决方法如下: CBox(const CBox & initB); 由于是引用形参,因此没有复制发生,const 限定符用来确保该函数不能修改实参. class CMessage { private: char

C++学习基础六——复制构造函数和赋值操作符

1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作符:返回值是本类的引用类型,参数类型是所属类的类型,且参数是一个const引用. 作用与复制构造函数相同. 其声明如下: 1 Sales_item& operator=(const Sales_item& rig); 3.什么情况下需要我们自己实现复制构造函数和赋值操作符? 一般情况下,C++

复制构造函数2&mdash;&mdash;深入理解

//如果不显示定义复制构造函数,编译会出错,原因是:在创建对象s2时,调用默认复制构造函数并用对象s1对其进行初始化,致使s2中指针 //与s1中指针指向同一储存空间,当一个对象生命周期结束后调用析构函数释放内存空间后,另一个变量的指针悬空,无法正常使用. //浅复制 //再用一个对象初始化另一个对象时,只复制了成员,没有复制资源(指堆内存 ,数据成员没有具体值),使两个对象同时指向同一资源, //如果不存在资源矛盾,程序可以正常运行 #include <cstring> #include&l

对象做函数参数和函数返回值时,调用复制构造函数,构造函数,析构函数的情况

// 对象做函数参数和返回值.cpp : 定义控制台应用程序的入口点.//exit(0)表示正常退出程序,exit(0)表示异常退出 //在调用input时,编译器用对象A去创建了形参对象temp,调用了复制构造函数,对象A中的数据复制给了对象temp// 在input函数中,执行temp.set(s),为对象temp中数据成员str申请了动态储存空间,并设置了输入的字符串//并没有改变实参A中的数据成员str的储存空间,故在执行语句A.show()后输出的字符串并没有改变.在函数调用结束后 /