Chester的小院

无印良品

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2011年4月13日

摘要: 合理设计之一:将共享的成员放置到base class中。合理设计之二:对于class的成员,应该在构造函数中或者其他的成员函数中初始化。如果让子类class去初始化base class的成员,将会破坏封装性。 纯虚析构函数设计者一定要定义它,因为子类调用析构函数的时候,会默认静态地调用积累的虚析构函数,因此中间层如果没有定义,则会出现连接失败。因此一个较好的方案是,不要把析构函数写成纯虚。 如果成员member function声明成虚函数,但是函数体是一个inline形式的(如果简单地return一个member data),那么每次被调用,而根本不会被子类复写的。这样的函数调用会消耗很大的 阅读全文
posted @ 2011-04-13 00:17 chester_lp 阅读(150) 评论(0) 推荐(0)

摘要: 4.1 Member的各种调用方式Nonstatic Member Functions:速度和一般的Nonmember function 有相同的效率。 编译器会对nonstatic member function进行改造。加入this参数,改变函数内部的对member data 的使用方法(使用this指针来存取!),改变函数的名字--相当于nonmember function。这里面有一个函数名字的处理问题(name mangled处理)。Virtual Member Funciton:首先虚函数的调用方式若是指针调用,则是通过指针,找到vptr,打出偏移找到函数地址进行调用。其次,vpt 阅读全文
posted @ 2011-04-13 00:16 chester_lp 阅读(254) 评论(0) 推荐(0)

摘要: C++ standard 不强制规定“base class subjects的排列次序”“不同存取层记得data members的排列次序” ,也不规定“virtual funcitons 和 virtual base class“的实现细节。当一个类并没有任何声明的时候,它实做一个对象的时候,实际分配了1个字节的大小的空间。从而使得这个对象能够有独一无二的地址空间。而一个对象的大小不仅仅包含了该类所声明的nonstatic data members,而且还受到了,1、支持语言特性(各种virtual特性)。2、边界对齐特性。的影响。形成其最终大小。3.1 Data Member的绑定(The 阅读全文
posted @ 2011-04-13 00:16 chester_lp 阅读(238) 评论(0) 推荐(0)

摘要: 2.1 Default Constructor 的构建操作 Default Constructors只有当编译器需要default constructor的时候才会合成出一个constructor, 只有下面的四种情况才会有nontrivial default constructor产生,其余的都是trivial default constructor。(nontrivial是合成的有用的默认函数,trivial则是没多大用处的构造器) a、带有Default Constructor 的 Member Class Object如果一个class自己没有定义constructor,但是内含一个m 阅读全文
posted @ 2011-04-13 00:14 chester_lp 阅读(345) 评论(0) 推荐(0)

摘要: 从准备找工作至今,才阅读完B.Lippman的Inside The C++ Object Model。所以索性整理一下对C++对象模型一书的读书心得。 --by chesterlee第一章 关于对象 首先应该说下C的“算法驱动”思路:C语言中,“数据”和“处理数据的操作”十分开来的。简言之,这样的程序方法叫做“程序性的”,由以功能为导向的函数的算法所驱动,处理的是来自外部的数据。 而在C++中,则使用的是独立的“抽象数据类型abstract data type(ADT)”所驱动。这样符合软件工程的设计。如果不使用virtual,C++本身的class布局及存取时间和struct没有区别。言外之 阅读全文
posted @ 2011-04-13 00:12 chester_lp 阅读(252) 评论(0) 推荐(0)

2011年4月12日

摘要: 首先腾网易之前的技术文章过来。把这里做技术学习的园地。开始做吧。 阅读全文
posted @ 2011-04-12 23:43 chester_lp 阅读(109) 评论(0) 推荐(0)