//如果不显示定义复制构造函数,编译会出错,原因是:在创建对象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;

}

最新文章

  1. 刷新ALV定位到当前记录行
  2. PHP ob系列函数详解
  3. spring属性依赖注入
  4. WinForm中使用AnyCAD三维控件 の 初始化
  5. BrnShop开源网上商城第六讲:扩展视图功能
  6. os4开始CLLocationManager类中不支持locationServicesEnabled属性了
  7. File上传
  8. 【算法】改进的冒泡排序 O(n^2) 稳定的 C语言
  9. HttpWebRequest.GetResponse() raises exception when http status code 400 (bad request) is returned
  10. q.js实现nodejs顺序调用
  11. Asp.Net Core 轻松学-实现跨平台的自定义Json数据包
  12. (1234队)NABCD分析
  13. 学习笔记39—笑谈FireFox标签不同步(IOS和Wiindows)
  14. Windows添加用户和组命令
  15. jquery 属性-记住
  16. 尚硅谷redis学习1-NOSQL简介
  17. spring mvc 文件上传工具类
  18. 可以在任何时候attach一个shader到program对象
  19. java replace方法 无法改变原字符串,使用时需重新赋值
  20. Linux系统启动详解(一)

热门文章

  1. 如何实现View上添加标签
  2. c语言运算符号详细说明
  3. poj 2484 A Funny Game(博弈)
  4. 一个awk命令的demo
  5. A Dicey Problem 骰子难题(Uva 810)
  6. there be 句型
  7. java 运行项目不放到tomcat下的webapps文件夹下放到自己建的文件夹中的处理办法
  8. DB2 insert into 三种写法
  9. luajit 安装cjson
  10. .net对js和css、img剥离项目进行压缩优化、cdn加速