C++的一些复习

经常用C++,但是有些细节未必经常会用到。随便翻了翻书,随便拾起了几条细节回忆。

 

1.构造函数里对成员对象的初始化尽量在初始化列表里,而不要在构造函数里赋值。因为,c++对象的构造分为两步:

  1)数据成员的初始化

  2)执行被调用构造函数体内的语句。

  如上,数据成员初始化时也会调其构造函数,如果没有初始化列表,那么数据成员对象的默认构造函数会被调用一次。OK,这时到了第2步,还会再调用一次赋值操作。这样,对数据成员的初始化做了2此操作,一是缺省构造函数,二是赋值操作。其实如果写在初始化列表里,那么只需要一次构造函数的调用就可以完成。当然如果数据成员是固定的类型,那么两种情况的效率是相当的。

 

2.区分一下重载,覆盖和隐藏。

  重载:函数名相同,参数不同。在相同的作用域里。

  覆盖:虚函数override。派生类里的虚函数覆盖基类里的同名同参数虚函数。

  隐藏:如果派生类和基类里的函数名相同而参数不同,无论是否虚函数,在派生类里都“看不见”基类里的该函数。如果派生类里的某函数和基类里的某函数名称和参数都相同,而且不是虚函数,那么在派生类里也“看不见”基类里的该函数。

 

3.内联函数一般是跟在函数的定义而非声明。

  如下风格的内联函数不能生效

  inline void foo(int x,int y)

  void foo(in x,int y)

  {

      //to do

  }

  而如下风格的函数Foo 则成为内联函数:
  void Foo(int x, int y);
  inline void Foo(int x, int y) // inline 与函数定义体放在一起
  {

      //to do
  }

 

4. 初始化列表中成员列出的顺序和它们在类中声明的顺序相同。和初始化列表里的顺序无关。

 

5. extern “c”。

  extern “C”
 {
    void foo(int x, int y);
    // 其它函数
 }
 或者写成
extern “C”
{
    #include “myheader.h”
    // 其它C 头文件
}
这就告诉C++编译译器,函数foo 是个C 连接,应该到库中找名字_foo 而不是找_foo_int_int。C++编译器开发商已经对C 标准库的头文件作了extern“C”处理,所以我们可以用#include 直接引用这些头文件。

 

6.对于不修改成员变量的函数,都应该定义成const函数。

 

先看了这些,以后想到再补充。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值