当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

<b>复制对象时勿忘其每一个成份</b>[VC/C++编程]

赞助商链接



  本文“<b>复制对象时勿忘其每一个成份</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

从条款05中我们知道编译器为你供应了一些默许copying函数,而在某些情形下,我们不想要编译器供应的版本,我们自定义copying构造函数和copying assign操作函数,这个时刻你无形之中触怒了我们的编译器,你不用它的东西,它很"气愤",于是它就开始复仇:你的实现代码几近出错时,它就是不奉告你.这里考虑一个类用来表现一个利用用程序事件范例Event:

class Event{
public:
Event(int id):eventID_(id){
}
Event(const Event& rhs):eventID(rhs.eventID_){
}
Event& operator=(const Event& rhs){
eventID_ = rhs.eventID_;
return *this;
}
...
private:
int eventID_;
};
这样的代码没有问题也很公道,接下来我们增添了一个变量DateTime来记录该事件发生的时间:
class DateTime{...};
class Event{
.... //代码与上面相同
private:
int eventID_;
DateTime dateTime_;
};

这里发生了什么事情?对了,在copying构造函数中忘掉对成员变量dataTime_举行初始化,在copying assign中忘掉对dateTime_举行复制了.这里明显存在了"部分拷贝"的现象,而大大都编译器对这种现象却"视而不见",即便处于最高级别的告诫级别中,这就是编译器的"复仇":既然你不用我供应的函数,那么你自己写的代码出错,我也不奉告你.没办法了,编译器不奉告我们,我们这里只能靠我们自己的当心和细心了:确保你在复制对象时,复制全部成员变量.当你增添一个新的成员变量时,要同时改正copying构造函数和copying assign运算符操作,假如你忘掉编译器不会这时就不会仁慈地去提醒你的.在有担当关系情形下,这里需求你注意一种情形:当你写copying构造和copying assign操作符操作时,注意要复制base class的成员变量,比方有一个系统SystemEvent类:

class SystemEvent:public Event{
public:
SystemEvent(int id,int priority):Event(id),priority_(priority){}
SystemEvent(const SystemEvent& rhs):Event(rhs),priority_(rhs.priority_){
//这里调用了base class的copying 构造函数
}
SystemEvent& operator=(const SystemEvent& rhs){
Event::operator=(rhs); //调用base class的copying assign 操作函数
priority_ = rhs.priority_;
return *this;
}
private:
int priority_;
};

目前你应当理解条款中"复制"的含义:(1)复制全部local成员变量;(2)调用base class内得当的copying 函数.

OK,It's over!

请记着:

★ Copying函数应当确保复制"对象内全部成员变量"及"全部base class 成份"

★ 不要尝试以某个copying函数实现另一个copying函数.应当将共同机能放进第三个函数中,并由两个copying函数共同调用.


  以上是“<b>复制对象时勿忘其每一个成份</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .