//如果不显示定义复制构造函数,编译会出错,原因是:在创建对象s2时,调用默认复制构造函数并用对象s1对其进行初始化,致使s2中指针

//与s1中指针指向同一储存空间,当一个对象生命周期结束后调用析构函数释放内存空间后,另一个变量的指针悬空,无法正常使用。

//浅复制

//再用一个对象初始化另一个对象时,只复制了成员,没有复制资源(指堆内存 ,数据成员没有具体值),使两个对象同时指向同一资源,

//如果不存在资源矛盾,程序可以正常运行

#include <cstring>

#include<iostream>

using namespace std;

class Student

{

public:

Student(int pid, char *pname, float s);

Student(const Student& init);

void display();

~Student();

private:

int id;

char *name;

float score;

};

Student::Student(int pid, char * pname, float s)

{

id = pid;

name = new char[strlen(pname) + 1];//学会这种表达方式!!

strcpy(name,pname);

score = s;

}

Student::Student(const Student & init)//理解!!

{

id = init.id;

name = new char[strlen(init.name) + 1];

strcpy(name, init.name);

score = init.score;

}

void Student::display()

{

cout << "id" << id << endl;

cout << "name" << name << endl;

cout << "score" << score << endl;

}

Student::~Student()

{

delete[] name;

}

int main()

{

Student s1(1511435, "zhanghua", 67);

s1.display();

Student s2 = s1;

s2.display();

return 0;

}

复制构造函数2——深入理解的更多相关文章

  1. 深入理解c++构造函数, 复制构造函数和赋值函数重载(operator=)

    注 以下代码编译及运行环境均为 Xcode 6.4, LLVM 6.1 with GNU++11 support, Mac OS X 10.10.2 调用时机 看例子 // // main.cpp / ...

  2. 剑指offer 复制构造函数

    复制构造函数: A(const A &other){value=other.value;} 也就是传值参数改为常量引用. #include<iostream> using name ...

  3. 编译器角度看C++复制构造函数

    [C++对象模型]复制构造函数的建构操作 关于复制构造函数的简单介绍,可以看我以前写过的一篇文章C++复制控制之复制构造函数该文章中介绍了复制构造函数的定义.调用时机.也对编译器合成的复制构造函数行为 ...

  4. C++中复制构造函数与重载赋值操作符总结

    前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符 ...

  5. C++中复制构造函数与重载赋值操作符

    我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数.析构函数.复制构造函数和重载赋值操作:即使在你没有明确定义的情况下,编译器也会给你生成这样的四个函数.例如以下类:   class CTe ...

  6. c++类与对象(1)——构造,复制构造函数

    CPP的类与对象: 当我们定义一个基本类型变量时,方法如下: int p; #定义一个int类型变量 bool b; #定义一个bool类型变量 float c ; #定义一个float类型变量 显然 ...

  7. C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容

    一.本文目的与说明 1. 本文目的:理清在各种继承时,构造函数.复制构造函数.赋值操作符.析构函数的执行顺序和执行内容. 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的 ...

  8. C++ 类 复制构造函数 The Copy Constructor

    一.复制构造函数的定义 复制构造函数是一种特殊的构造函数,具有一般构造函数的所有特性.复制构造函数创建一个新的对象,作为另一个对象的拷贝.复制构造函数只含有一个形参,而且其形参为本类对象的引用.复制构 ...

  9. 【C++】复制构造函数

    参考资料:黄邦勇帅(里面对于临时变量的说法我不是很理解,感觉里面的解释有问题) 用到复制构造函数的情况: 1.函数值传递 2.返回对象 3.用一个对象初始化另一个对象 重点注意下面两种情况: ① 只调 ...

随机推荐

  1. Axure RP Pro 6.5 正式版发布,新功能介绍,

    转:http://www.babesun.com/blog/page/5 2012-4-19,Axure公司发布了Axure RP Pro 6.5 正式版.网上高手发现了Axure支持多语言文件,以此 ...

  2. C#针对DataTable进行分页方法

    以下的分页方法是针对数据量不是非常大的数据进行的,是在内存中进行的分页操作. /// <summary> /// DataTable分页 /// </summary> /// ...

  3. Unity Twist Effect Black Hole

    Shader "Hidden/Twist Effect" {Properties { _MainTex ("Base (RGB)", 2D) = "w ...

  4. Axure初体验:简单交互、通过按钮切换图片

    前言: 之前是一直用processon的UI原型设计,后来感觉只能完成静态页面的processon满足不了原型设计的需求,断网时候也不方便修改.展示.最终还是决定学习动态页面的制作,所选工具为原型设计 ...

  5. C#中同时使用Lambda表达式和递归

    Func<object, int> RTFunc = (RTFuncRT) => { return (RTFuncRT as Func<object, int>)(RTF ...

  6. .net对js和css、img剥离项目进行压缩优化、cdn加速

    由于网站首页以及经常用的页面初始化慢,想后面想了对image.js和css进行迁移优化. 1.把他放到独立的域名上面,这个就要对image,js和css从原项目上面脱离,以及把原来很多页面引用的地址修 ...

  7. PHP运行出现Notice : Use of undefined constant 的完美解决方案

    Notice: Use of undefined constant title - assumed 'title' in F:\wamp\www\load_myweb.php on line 22No ...

  8. 利用Java API通过路径过滤上传多文件至HDFS

    在本地文件上传至HDFS过程中,很多情况下一个目录包含很多个文件,而我们需要对这些文件进行筛选,选出符合我们要求的文件,上传至HDFS.这时就需要我们用到文件模式. 在项目开始前,我们先掌握文件模式 ...

  9. 使用JExcel导出excel文件

    package org.aaa.portal.tools; import java.io.File; import java.io.IOException; import java.util.List ...

  10. 关于oracle的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例

    CREATE TABLE STUDENT( --创建学生表  ID NUMBER(10) PRIMARY KEY,   --主键ID  NAME VARCHAR2(20),  CLASSNAME VA ...