博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
条款12:复制对象时勿忘其每一部分
阅读量:6545 次
发布时间:2019-06-24

本文共 2235 字,大约阅读时间需要 7 分钟。

  复制对象时要把对象的每一部分都赋值到位,尤其在有基类的时候容易遗漏复制

 

#include
using namespace std;class Date{public: Date(int d = 1, int m = 1, int w = 1) :day(d), month(m), weekday(w) { cout << "基类构造函数" << endl; } Date(const Date& rhs) { day = rhs.day; month = rhs.month; } Date& operator=(const Date& rhs) { day = rhs.day; month = rhs.month; return *this; } ~Date() { cout << "基类析构函数" << endl; } void printDay() { cout << month << "月" << day << "日" << "周" << weekday << endl; }private: int day; int month; int weekday;};int main(){ //忘记了赋值weekend Date day1; Date day2(2, 2, 2); day1 = day2; day1.printDay(); /* 基类构造函数 基类构造函数 2月2日周1 */ system("pause");}

  在继承、派生体系中,对于派生类的复制控制函数,也要调用基类的复制控制,否则复制、赋值等操作只会作用于派生类特有的数据上:

  

#include
using namespace std;class Date{public: Date(int d = 1, int m = 1, int w = 1) :day(d), month(m), weekday(w) { cout << "基类构造函数" << endl; } Date(const Date& rhs) { init(rhs); } Date& operator=(const Date& rhs) { if (&rhs != this) { init(rhs); } return *this; } ~Date() { cout << "基类析构函数" << endl; } void printDay() { cout << month << "月" << day << "日" << "周" << weekday << endl; }private: void init(const Date &rhs) { day = rhs.day; month = rhs.month; weekday = rhs.weekday; }public: int day; int month; int weekday;};class DetailDay :public Date{public: DetailDay(const DetailDay& rhs) :year(rhs.year), Date(rhs) { } DetailDay(int y, int m, int d, int w) :year(y), Date(m, d, w) {} DetailDay& operator=(const DetailDay& rhs) { Date::operator=(rhs); year = rhs.year; return *this; } void printDay() { cout << year<<"年"<
<< "月" << day << "日" << "周" << weekday << endl; }private: int year;};int main(){ DetailDay dt(2017, 5, 10, 3); dt.printDay(); system("pause");}

最后有一点需要注意:我们发现,复制构造函数和赋值构造函数里面很多内容是重复的。此时并不要用一个去调用另外一个,良好的编程习惯是定义一个init函数,让这两个函数都调用它,就想像程序中所做的那样。

转载于:https://www.cnblogs.com/readlearn/p/10806503.html

你可能感兴趣的文章
Exchange2007-Exchange2010升级-06 数据库高可用组的创建
查看>>
phpHiveAdmin是如何通过Hive/Hadoop工作的
查看>>
双向链表内结点的删除(4)
查看>>
项目总结
查看>>
JSON字符串转成对象
查看>>
SaltStack 中ZMQ升级
查看>>
implode 和 explode
查看>>
exchange 2013 提示“HTTP 500内部服务器错误”
查看>>
Linux运维学习笔记之一:运维的原则和学习方法
查看>>
怎样使用原型设计中的组件样式功能
查看>>
python threading
查看>>
谷安天下2013年6月CISA考前辅导 第一季
查看>>
ARM程序规范
查看>>
我的友情链接
查看>>
Qt下的OpenGL 编程(8)文字、FPS、动画
查看>>
Android开发入门系列
查看>>
文件删除封装,懒得以后再写了
查看>>
Linux 脚本之用户创建
查看>>
Mysql字段类型设计相关问题!
查看>>
Xshell 密钥登陆
查看>>