《深度探索C对象模型》读书笔记构造、结构、拷贝语意学.doc_第1页
《深度探索C对象模型》读书笔记构造、结构、拷贝语意学.doc_第2页
《深度探索C对象模型》读书笔记构造、结构、拷贝语意学.doc_第3页
《深度探索C对象模型》读书笔记构造、结构、拷贝语意学.doc_第4页
《深度探索C对象模型》读书笔记构造、结构、拷贝语意学.doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深度探索C+对象模型读书笔记:第5章 构造、结构、拷贝 语意学64位平台C/C+开发注意事项在/en/l/上例出了28个在64位平台上使用C/C+开发的注意事项,对于进入64位时代的程序员应该去看看这28个事项,这些英文读物对于有C/C+功底的朋友读起来应该并不难,我估计大约20-30分钟可以精读完一篇(或者更快),下面是这28个注意事项的列表。相信对大家一点有帮助。Bhui2014 Lesson 01. What 64-bit systems are. Lesson 02. S本章主要讲述了一下内容:虚函数、纯虚函数的声明,无继承情况下的对象构造,继承体系下的对象构造,对象复制语意学,对象的功能,解构语意学。虚函数、纯虚函数的声明部分对应P191P195之间的内容,主要讲述了如下内容:ClassAbstract_basepublic:virtualAbstract_base()=0;virtualvoidinterface()const=0;virtualconstchar*mumble()constreturn_mumble;protected:char*_mumble;1. 本类缺少一个构造函数。为什么本类需要一个构造函数呢?因为需要初始化_mumble。 2. 一个纯虚函数可以有实现。虽然是可以但是本人认为在本例中给出一个纯虚函数的实现来是很令人费解的;因为纯虚函数一般是在基类声明接口用的,只有子类才需要实现这个函数。3. 什么样的函数需要是虚的呢?结合书中所述和本人自己的理解,只有一个函数可能因为类型(注意是类型而是类,类型与类的区别设计模式一书第一章有说明)不同而有不同实现是需要声明成虚拟的。4. 什么函数需要是纯虚函数呢?在接口中声明的函数,做为基类的类中的可能因为类型不同而有不同实现的函数。5. 关于虚函数中的const问题。我的意见和数中一致,只有在确定需要const的时候再加。6. 关于析构造函数的虚拟性。强烈反对把一个类的构造函数声明称纯虚的;如果一个类可能做为基类且动态创建那么就需要把析构函数声明称虚拟的;其他情况基本不需要把析构函数声明成虚拟的。经过前面的讨论之后作者给出了Abstract_base的新定义。除了作者所说的一些问题外我感觉该类还需要一个拷贝构造函数。为什么呢?因为该类有一个char *成员,很可能该成员会指向一个动态分配的字符数组,为了在上述情况下的不至于发生浅拷贝的现象,所以需要一个拷贝构造函数。无继承情况下的对象构造主要讲述了如下内容:如果没有提供理论上我们可以认为编译器会给我们提供构造函数,析构函数,拷贝构造,拷贝赋值;但是在很多情况下这些函数是无用的;所以编译器要么没有生成要么没有调用这些函数。另外我们需要记住在C+中全局对象会被初始化,可能通过编译器或者我们提供的构造函数(int,char等内置类型也会被初始化)。在本书P199中Point locall = 1.0, 1.0, 1.0 这种初始化方式本人还是在这本书中第一次见到。P204页最下面部分的foobar函数声明有误,此时该函数返回值应该为void;此错误同P205页中间部分的foobar函数声明错误。继承体系下的对象构造主要讲述了如下内容:本小节讲了不少也很复杂,但是我觉得对于一个以应用为目的的程序员来说没有太大的必要搞得很清楚。只需要记住P206到P207之间对象在构造时的顺序就可以了。对象复制语意学主要讲述了如下内容:我们经常碰到的情况可以根据P220页所说的情况,来处理。什么时候需要我们提供一个拷贝赋值操作呢?本人觉得在想避免浅拷贝或者想提高效率的情况下提供一个copy assignment函数。其他情况基本上不需要提供该函数。对象的功能主要讲述了如下内容:对象构造和拷贝的效率问题,作为以应用为主的程序员不需要太注重这个问题。解构语意学主要讲述了如下内容:析构函数的作用,析构函数的调用顺序等内容。个人认为阅读本节只限于了解以上所述的内容即可。另外记住一条:如果某对象掌握有资源(动态申请的内存等),那么很多情况下该类需要一个析构函数来释放资源。来自:本章主要讲述了一下内容:虚函数、纯虚函数的声明,无继承情况下的对象构造,继承体系下的对象构造,对象复制语意学,对象的功能,解构语意学。虚函数、纯虚函数的声明部分对应P191P195之间的内容,主要讲述了如下内容:ClassAbstract_basepublic:virtualAbstract_base()=0;virtualvoidinterface()const=0;virtualconstchar*mumble()constreturn_mumble;protected:char*_mumble;1. 本类缺少一个构造函数。为什么本类需要一个构造函数呢?因为需要初始化_mumble。 2. 一个纯虚函数可以有实现。虽然是可以但是本人认为在本例中给出一个纯虚函数的实现来是很令人费解的;因为纯虚函数一般是在基类声明接口用的,只有子类才需要实现这个函数。3. 什么样的函数需要是虚的呢?结合书中所述和本人自己的理解,只有一个函数可能因为类型(注意是类型而是类,类型与类的区别设计模式一书第一章有说明)不同而有不同实现是需要声明成虚拟的。4. 什么函数需要是纯虚函数呢?在接口中声明的函数,做为基类的类中的可能因为类型不同而有不同实现的函数。5. 关于虚函数中的const问题。我的意见和数中一致,只有在确定需要const的时候再加。6. 关于析构造函数的虚拟性。强烈反对把一个类的构造函数声明称纯虚的;如果一个类可能做为基类且动态创建那么就需要把析构函数声明称虚拟的;其他情况基本不需要把析构函数声明成虚拟的。经过前面的讨论之后作者给出了Abstract_base的新定义。除了作者所说的一些问题外我感觉该类还需要一个拷贝构造函数。为什么呢?因为该类有一个char *成员,很可能该成员会指向一个动态分配的字符数组,为了在上述情况下的不至于发生浅拷贝的现象,所以需要一个拷贝构造函数。无继承情况下的对象构造主要讲述了如下内容:如果没有提供理论上我们可以认为编译器会给我们提供构造函数,析构函数,拷贝构造,拷贝赋值;但是在很多情况下这些函数是无用的;所以编译器要么没有生成要么没有调用这些函数。另外我们需要记住在C+中全局对象会被初始化,可能通过编译器或者我们提供的构造函数(int,char等内置类型也会被初始化)。在本书P199中Point locall = 1.0, 1.0, 1.0 这种初始化方式本人还是在这本书中第一次见到。P204页最下面部分的foobar函数声明有误,此时该函数返回值应该为void;此错误同P205页中间部分的foobar函数声明错误。继承体系下的对象构造主要讲述了如下内容:本小节讲了不少也很复杂,但是我觉得对于一个以应用为目的的程序员来说没有太大的必要搞得很清楚。只需要记住P206到P207之间对象在构造时的顺序就可以了。对象复制语意学主要讲述了如下内容:我们经常碰到的情况可以根据P220页所说的情况,来处理。什么时候需要我们提供一个拷贝赋值操作呢?本人觉得在想避免浅拷贝或者想提高效率的情况下提供一个copy assignment函数。其他情况基本上不需要提供该函数。对象的功能主要讲述了如下内容:对象构造和拷贝的效率问题,作为以应用为主的程序员不需要太注重这个问题。解构语意学主要讲述了如下内容:析构函数的作用,析构函数的调用顺序等内容。个人认为阅读本节只限于了解以上所述的内容即可。另外记住一条:如果某对象掌握有资源(动态申请的内存等),那么很多情况下该类需要一个析构函数来释放资源。来自:本章主要讲述了一下内容:虚函数、纯虚函数的声明,无继承情况下的对象构造,继承体系下的对象构造,对象复制语意学,对象的功能,解构语意学。虚函数、纯虚函数的声明部分对应P191P195之间的内容,主要讲述了如下内容:ClassAbstract_basepublic:virtualAbstract_base()=0;virtualvoidinterface()const=0;virtualconstchar*mumble()constreturn_mumble;protected:char*_mumble;1. 本类缺少一个构造函数。为什么本类需要一个构造函数呢?因为需要初始化_mumble。 2. 一个纯虚函数可以有实现。虽然是可以但是本人认为在本例中给出一个纯虚函数的实现来是很令人费解的;因为纯虚函数一般是在基类声明接口用的,只有子类才需要实现这个函数。3. 什么样的函数需要是虚的呢?结合书中所述和本人自己的理解,只有一个函数可能因为类型(注意是类型而是类,类型与类的区别设计模式一书第一章有说明)不同而有不同实现是需要声明成虚拟的。4. 什么函数需要是纯虚函数呢?在接口中声明的函数,做为基类的类中的可能因为类型不同而有不同实现的函数。5. 关于虚函数中的const问题。我的意见和数中一致,只有在确定需要const的时候再加。6. 关于析构造函数的虚拟性。强烈反对把一个类的构造函数声明称纯虚的;如果一个类可能做为基类且动态创建那么就需要把析构函数声明称虚拟的;其他情况基本不需要把析构函数声明成虚拟的。经过前面的讨论之后作者给出了Abstract_base的新定义。除了作者所说的一些问题外我感觉该类还需要一个拷贝构造函数。为什么呢?因为该类有一个char *成员,很可能该成员会指向一个动态分配的字符数组,为了在上述情况下的不至于发生浅拷贝的现象,所以需要一个拷贝构造函数。无继承情况下的对象构造主要讲述了如下内容:如果没有提供理论上我们可以认为编译器会给我们提供构造函数,析构函数,拷贝构造,拷贝赋值;但是在很多情况下这些函数是无用的;所以编译器要么没有生成要么没有调用这些函数。另外我们需要记住在C+中全局对象会被初始化,可能通过编译器或者我们提供的构造函数(int,char等内置类型也会被初始化)。在本书P199中Point locall = 1.0, 1.0, 1.0 这种初始化方式本人还是在这本书中第一次见到。P204页最下面部分的foobar函数声明有误,此时该函数返回值应该为void;此错误同P205页中间部分的foobar函数声明错误。继承体系下的对象构造主要讲述了如下内容:本小节讲了不少也很复杂,但是我觉得对于一个以应用为目的的程序员来说没有太大的必要搞得很清楚。只需要记住P206到P207之间对象在构造时的顺序就可以了。对象复制语意学主要讲述了如下内容:我们经常碰到的情况可以根据P220页所说的情况,来处理。什么时候需要我们提供一个拷贝赋值操作呢?本人觉得在想避免浅拷贝或者想提高效率的情况下提供一个copy assignment函数。其他情况基本上不需要提供该函数。对象的功能主要讲述了如下内容:对象构造和拷贝的效率问题,作为以应用为主的程序员不需要太注重这个问题。解构语意学主要讲述了如下内容:析构函数的作用,析构函数的调用顺序等内容。个人认为阅读本节只限于了解以上所述的内容即可。另外记住一条:如果某对象掌握有资源(动态申请的内存等),那么很多情况下该类需要一个析构函数来释放资源。来自:本章主要讲述了一下内容:虚函数、纯虚函数的声明,无继承情况下的对象构造,继承体系下的对象构造,对象复制语意学,对象的功能,解构语意学。虚函数、纯虚函数的声明部分对应P191P195之间的内容,主要讲述了如下内容:ClassAbstract_basepublic:virtualAbstract_base()=0;virtualvoidinterface()const=0;virtualconstchar*mumble()constreturn_mumble;protected:char*_mumble;1. 本类缺少一个构造函数。为什么本类需要一个构造函数呢?因为需要初始化_mumble。 2. 一个纯虚函数可以有实现。虽然是可以但是本人认为在本例中给出一个纯虚函数的实现来是很令人费解的;因为纯虚函数一般是在基类声明接口用的,只有子类才需要实现这个函数。3. 什么样的函数需要是虚的呢?结合书中所述和本人自己的理解,只有一个函数可能因为类型(注意是类型而是类,类型与类的区别设计模式一书第一章有说明)不同而有不同实现是需要声明成虚拟的。4. 什么函数需要是纯虚函数呢?在接口中声明的函数,做为基类的类中的可能因为类型不同而有不同实现的函数。5. 关于虚函数中的const问题。我的意见和数中一致,只有在确定需要const的时候再加。6. 关于析构造函数的虚拟性。强烈反对把一个类的构造函数声明称纯虚的;如果一个类可能做为基类且动态创建那么就需要把析构函数声明称虚拟的;其他情况基本不需要把析构函数声明成虚拟的。经过前面的讨论之后作者给出了Abstract_base的新定义。除了作者所说的一些问题外我感觉该类还需要一个拷贝构造函数。为什么呢?因为该类有一个char *成员,很可能该成员会指向一个动态分配的字符数组,为了在上述情况下的不至于发生浅拷贝的现象,所以需要一个拷贝构造函数。无继承情况下的对象构造主要讲述了如下内容:如果没有提供理论上我们可以认为编译器会给我们提供构造函数,析构函数,拷贝构造,拷贝赋值;但是在很多情况下这些函数是无用的;所以编译器要么没有生成要么没有调用这些函数。另外我们需要记住在C+中全局对象会被初始化,可能通过编译器或者我们提供的构造函数(int,char等内置类型也会被初始化)。在本书P199中Point locall = 1.0, 1.0, 1.0 这种初始化方式本人还是在这本书中第一次见到。P204页最下面部分的foobar函数声明有误,此时该函数返回值应该为void;此错误同P205页中间部分的foobar函数声明错误。继承体系下的对象构造主要讲述了如下内容:本小节讲了不少也很复杂,但是我觉得对于一个以应用为目的的程序员来说没有太大的必要搞得很清楚。只需要记住P206到P207之间对象在构造时的顺序就可以了。对象复制语意学主要讲述了如下内容:我们经常碰到的情况可以根据P220页所说的情况,来处理。什么时候需要我们提供一个拷贝赋值操作呢?本人觉得在想避免浅拷贝或者想提高效率的情况下提供一个copy assignment函数。其他情况基本上不需要提供该函数。对象的功能主要讲述了如下内容:对象构造和拷贝的效率问题,作为以应用为主的程序员不需要太注重这个问题。解构语意学主要讲述了如下内容:析构函数的作用,析构函数的调用顺序等内容。个人认为阅读本节只限于了解以上所述的内容即可。另外记住一条:如果某对象掌握有资源(动态申请的内存等),那么很多情况下该类需要一个析构函数来释放资源。来自:本章主要讲述了一下内容:虚函数、纯虚函数的声明,无继承情况下的对象构造,继承体系下的对象构造,对象复制语意学,对象的功能,解构语意学。虚函数、纯虚函数的声明部分对应P191P195之间的内容,主要讲述了如下内容:ClassAbstract_basepublic:virtualAbstract_base()=0;virtualvoidinterface()const=0;virtualconstchar*mumble()constreturn_mumble;protected:char*_mumble;1. 本类缺少一个构造函数。为什么本类需要一个构造函数呢?因为需要初始化_mumble。 2. 一个纯虚函数可以有实现。虽然是可以但是本人认为在本例中给出一个纯虚函数的实现来是很令人费解的;因为纯虚函数一般是在基类声明接口用的,只有子类才需要实现这个函数。3. 什么样的函数需要是虚的呢?结合书中所述和本人自己的理解,只有一个函数可能因为类型(注意是类型而是类,类型与类的区别设计模式一书第一章有说明)不同而有不同实现是需要声明成虚拟的。4. 什么函数需要是纯虚函数呢?在接口中声明的函数,做为基类的类中的可能因为类型不同而有不同实现的函数。5. 关于虚函数中的const问题。我的意见和数中一致,只有在确定需要const的时候再加。6. 关于析构造函数的虚拟性。强烈反对把一个类的构造函数声明称纯虚的;如果一个类可能做为基类且动态创建那么就需要把析构函数声明称虚拟的;其他情况基本不需要把析构函数声明成虚拟的。经过前面的讨论之后作者给出了Abstract_base的新定义。除了作者所说的一些问题外我感觉该类还需要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论