对于大牛来说,我写的可能很低级哈,留给自己看,以后遇到的都慢慢补充哈!^^

1.每一个类定义结束后,不要忘了在类的结束符"}"后面加上一个";"哦!

2.构造函数和析构函数肯定是不能只申明而不定义的,因为这个两个函数无论如何都会被调用。其他成员函数倒是可以只申明而不定义---只要你不调用它!

3.一个类会隐含的提供构造函数、构造函数、复制构造函数、赋值函数、析构函数!

4.一个空类或结构体,但用sizeof去测它的大小时并不为空,而是为1!这是编辑器给它加的,试想如果不加一个字节那么A a[3];(A是一个空类),那a[0],a[1],a[2]岂不是都是同一个地址?可见0不仅在数学上要特殊考虑,在计算机中也要特殊考虑哦!

5.如果你不在一个类成员前面加上public、private、protected的访问控制的描述,class里面默认是private,而struct里面是public哦!

6.有non-virtual member function(无论是non-static还是static)的class不会改变class的大小哦,但是有virtual member function的class会增加一个指针字节的大小,这是因为有virtual member function的class要维持一个指向vtbl(virual table)表的指针,这与C++对象模型有关!

7.类的non-static会使类增加相应的大小,而static则不。理由同6哦!

8.6,7也许让你困惑,现在就来说说需要多少内存才能表现一个class object呢?一般而言有:

  a.其中nonstatic data members的总和大小。

  b.加上任何由于alignment的需求而填补上去的空间(可能存在于members之间,也可能存在于集合体边界---可以理解为边界补齐吧)。

  c.加上为了支持virtual而由内部产生的额外负担。

9.无论是public还是private的静态成员变量只能在class里面定义,然后在类外面完成初始化(以上已在VC环境中,有的编译器可以在类中声明的时候就可以初始化了)。

10.C++以下列方式支持多态

  a.经由一组隐含的转化操作,例如把一个derived class指针转化为一个指向其public base type的指针:shape *ps = new circle().

  b.经由 virtual function 机制:ps->rotate();

  c.经由dynamic_cast和typeid运算符:if( circle *pc = dynamic_cast< circle *>( ps )) ...

11. 析构函数最好不要声明为纯虚函数。

12. 静态成员函数不能被const virtual volatile关键字描述。静态成员函数不能对直接存取其 class 中的 非静态成员变量!

13.一个指针,无论它指向什么类型,指针本身的大小都是固定的,一般是一个机器字!“指向不同类型之间的各个指针”间的差异,既不表现在其指针表示方法不同,也不在其内容(都是代表一个地址)不同,而是其所在寻址出来的 object 类型不同。也就是"指针类型"会教导编译器如何解释某个特定地址中的内存内容及其大小!

 

posted on 2013-11-09 11:29  水目沾  阅读(227)  评论(0编辑  收藏  举报