首页 相关文章 C++箴言:拷贝一个对象的所有组成部分

C++箴言:拷贝一个对象的所有组成部分

在设计良好的面向对象系统中,为了压缩其对象内部的空间,仅留两个函数用于对象的拷贝:一般称为拷贝构造函数(copy constructor)和拷贝赋值运算符(copy assignment operator)。我们将它们统称为拷贝函数(copying functions)。如果需要,编译器会生成拷贝函数,而且阐明了编译器生成的版本正象你所期望的:它们拷贝被拷贝对象的全部数据。

  当你声明了你自己的拷贝函数,你就是在告诉编译器你不喜欢缺省实现中的某些东西。编译器对此好像怒发冲冠,而且它们会用一种古怪的方式报复:当你的实现存在一些几乎可以确定错误时,它偏偏不告诉你。

  考虑一个象征消费者(customers)的类,这里的拷贝函数是手写的,以便将对它们的调用记入日志:

void logCall(const std::string& funcName); // make a log entry

class Customer {
  public:
   ...
   Customer(const Customer& rhs);
   Customer...[ 查看全文 ]

2016-02-19 标签:
  • 很多准妈妈们可能对美育胎教并不是特别熟悉,美育胎教是通过妈妈们的生理和心理两个方面对美的感受来对胎儿进行教育的一种胎教方法。美育胎教对妈妈和宝宝都会起到很好的调节作用。 美育胎教的组成部分 美育胎教包括了孕妇生理和心理的两个部分,其中生理上的感受有看和听,心理上的胎教有体会和领悟。生理上的看和听,是孕妇看一些美好的东西,比如多看一些名家画展,多到大自然中看一些美景等...[ 查看全文 ]
  • C++类对象的拷贝构造函数 作者:韩耀旭 对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include <iostreamusing namespace std;class CA{public:CA(int b){a=b;}void Show (){cout<<a<<endl;}private:int a;};int main(){CA A(10...[ 查看全文 ]
  • 近年来,广告已成为很多网站的主要收入来源。不久前,在线广告往往遭到访客的拒绝,广告客户也不确定它的价值和效力。今天,大多数访客期望在商业网站上看到广告,广告客户已经认识到各种在线广告的潜在机会。长期以来广告一直是印刷出版物的一部分,如杂志和报纸,现在它们已经在网上期刊和出版物扮演同样的角色。 网站所有者或者发布的产品和服务总是会担心广告存在的影响,同时它也影响着网页设计师,因...[ 查看全文 ]
  • 一个 C++ 日期类(第一部分) 原著 Chuck Allison 翻译:孟谨 原文出处:Code Capsules:A C++ Date Class, Part 1 本文适合初级读者 Chuck Allison 是盐湖城圣 Latter Day 教堂总部下耶稣教堂家族历史研究处的软件体系设计师。他拥有数学学士和数学硕士学位。他从1975年起开始编程,从1984年起他开始从...[ 查看全文 ]
  • 一个 C++ 日期类(第二部分) 原著 Chuck Allison 翻译:孟谨 原文出处:Code Capsules:A C++ Date Class, Part 2 本文适合初级读者 Chuck Allison 是盐湖城圣 Latter Day 教堂总部下耶稣教堂家族历史研究处的软件体系设计师。他拥有数学学士和数学硕士学位。他从1975年起开始编程,从1984年起...[ 查看全文 ]
  • C++对象计数 作者:yy2better 关键字:C++ 对象计数 实例计数 本文目的是实现一个实用的对C++类计数的类,同时在实现过程中指出一些容易为人忽视的C++知识。 要实现一个类的对象(实例)计数,即程序运行中此类有多少个对象存在,最容易的实现方法是使用静态数据成员。如下: class Widget {public: Widget() { ++count; } ...[ 查看全文 ]
  • 介绍一个专门处理C++异常的类 作者:PJ Naughter 下载源代码和例子 简介: CExceptionLogger ,是一个可以免费使用的C++类,用它可以截获未处理异常,如:非法存取、栈溢出、被零除等,并可以将异常详细信息记录到日志文件。这个类源自于MSDN Magazine 2002年3月的一篇专栏文章“Under the H...[ 查看全文 ]
  • 标签:PHP
    在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个XMLHttpRequest对象,前面 的请求还未完成,后面的就会把前面的覆盖掉,如果每次都创建一个新的XMLHttpRequest对象, 也会造成浪费。解决的办法就是创建一个XMLHttpRequset的对象池,如果池里有空闲的对象, 则使用此对象,否则将创建一个新的对象。下面是我最近写的一个简单的类: /**  * XMLHttpRequest Object Pool  *...[ 查看全文 ]
  • 《c++编程思想》上说一个类如果没有拷贝函数,那么编译器就会自动创建一个默认的拷贝函数。下面就让我们看一下真实的情况。 首先看一个简单的类X,这个类没有显示定义拷贝构造函数。 c++源码如下: 代码如下: class X { private:     int i;     int j; }; int main() {     X x1;//先定义对象x1     X x2 = x1;//将x1拷贝给x2 } 下面...[ 查看全文 ]
  • C++编程杂谈之二:面向对象 作者/xulion 软件开发是一个极其复杂的过程,一段小的代码我们可以快速、准确的完成,但是当你面对的是一个庞大的软件系统的时候,你是否有不知所措的感觉呢? 在我们使用C的年代里面,编程思想是结构化的,你的C语言老师可能会不断的教导你怎样使用结构化的方法来完成一段程序,同时,你可能也知道在软件开发中的一个重...[ 查看全文 ]
  • C++编程杂谈之三:面向对象(续) 作者:xulion 下载例子源代码     上一篇我们涉及了面向对象的一个基本概念--封装,封装是一个相对比较简单的概念,也很容易接受,但是很多的场合下面,仅仅是封装并不能很好的解决很多问题,考虑下面的例子: 假设我们需要设计一个对战游戏的战斗细节,在最初的版本中我们将支持...[ 查看全文 ]
  • 代码如下: 代码如下: SPAN style="FONT-SIZE: 18px" char* p = "1010110001100";  int n = 0;  for(int i=0;istrlen(p); i++)  {   n = n * 2 + (p[i] - '0');  }  printf("%d\n", n);/SPAN [ 查看全文 ]
  • /*p129*/#include class CComplex{public: CCpomplex(double r=0,double i=0) { realPart=r; imagePart=i; } void print() { cout /*p129*/#include class CComplex{public: CCpomplex(double r=0,double i=0) { realPart=r; imagePart=i; } void print() { cout[ 查看全文 ]
  • C++中的虚函数(一) 作者:aber     虽然很难找到一本不讨论多态性的C++书籍或杂志,但是,大多数这类讨论使多态性和C++虚函数的使用看起来很难。我打算在这篇文章中通过从几个方面和结合一些例子使读者理解在C++中的虚函数实现技术。说明一点,写这篇文章只是想和大家交流学习经验因为本人学识浅薄,难免有一些错误和不足...[ 查看全文 ]
  • 下面是c++的源码: 代码如下: class X  { public:    int i;    int j;    ~X() {} }; void f(X x) {   X x1;   x.i = 1;   x.j = 2; } int main() {     f(X()); } 下面是main函数的汇编码: 代码如下: _main    PROC ; 15   : int main() {     push    ebp  ...[ 查看全文 ]
  • 一、C++头文件究竟是什么,你怎么看? 每个C++/C程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个文件用于保存程序的实现(implementation),称为定义(definition)文件。C++/C程序的头文件以“.h”为后缀,C程序的定义文件以“.c”为后缀,C++程序的定义文件通常以“.cpp”为后缀(像linux等系统以“.cc”或“.cxx”为后缀)。简而言之,就是用于声明的文件。 ...[ 查看全文 ]
  • 在预先定义的内存位置构造一个对象 赵湘宁     常常有人问这样一个C++问题:如何在预先定义的内存位置构造一个对象?在预先定义的内存缓冲构造一个对象有许多有用的应用。例如,一个定制的垃圾搜集器能使用一个大的预分配内存缓冲,用户在这个缓冲中构造其对象。当不再需要这些对象时,它们的存储空间被自动收回。  &...[ 查看全文 ]
  • c++中,临时对象一旦不需要,就会调用析构函数,释放其占有的资源;而具名对象则是与创建的顺序相反,依次调用析构函数。 c++源码: 代码如下: class X  { public:    int i;    int j;    ~X() {}    X() {} }; int main() {     X x1;     X();     x1.i = 1;     X x2;   &n...[ 查看全文 ]
  • 这个例子,也可以看作是使用类模块的入门级的演示。 新建一个工程,在form1中添加3个文本框。我们希望对这三个文本框中输入的字符进行限制,第一个只允许输入数字,第二个只允许输入字母,第三个只允许输入大写字母。 一般的做法,可以在这三个文本框的keypress事件过程中分别写检查代码。好一点的方案,是把检查代码写成一个共用的过程,让这三个文本框的keypress事件去各自进行调用。 ...[ 查看全文 ]
  • 标签:Web开发
    一个可以找出源代码中所有中文的工具 填写需要查找的路径$sf即可。 功能 1 找出所有中文 2 忽略注释语句中的中文 3 可添加需要忽略的文件和文件夹 4 生成日志文件 如果您正发愁为自己的软件更新语言包 请使用此工具。 我的例子: http://127.0.0.1/tools/searchcn.php http://127.0.0.1/tools/cnlog.txt 代码如下: ?php set_time_limit(0); ob_implicit_flush(); //...[ 查看全文 ]
手机页面 收藏网站 回到头部