C++中自己理解的一些细节哈

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

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 中的 非静态成员变量!

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值