星云外

C++ CHEAT SHEET

鉴于很多求职的童鞋被很多公司的变态编程题折磨,这里写一个精简的C++ CHEAT SHEET, 有了一定的C编程底子的童鞋看完这个应该能对付大部分C++试题了:

1。 extern 修饰的变量可以声明多次, 但是只能定义一次

2。 typedef int * x;  

      const  x t;

      那么t本身是const的,而它指向的int变量不是const

3。int (*p)[4];

    和

    typedef int ty[4]; 

    ty *p;

    等价

4。 const_cast 用来把一个const变量的const去掉

      reinterpret_cast用来改变指针的取址类型

5。 swith语句的case必须用整形, case可以出现在子{ } 中

6。 不能在某个case中定义变量, 但是可以在子{ }中定义变量

7。 for (; ; )第一个分号前只能写一条语句,所以只能定义同类型的多个变量

8。 goto在同一个函数内不能跳过局部变量的定义然后执行之后的语句(解决办法是讲这些变量写入子{ }中); 但是可以跳回一个一个变量的声明之前执行,原因是编译器会释放变量

9。 函数参数不能光用const/非const来重载。 但是对于参数是引用,可以这样重载

10。  return 一个非引用的对象,等于拷贝了一个对象到临时变量中。 而且不要在函数里返回一个局部对象的引用

11。 default参数只能出现一次, 要不在declare中,要不在definition中,但不能同时出现

12。  inline只是建议编译器内联,但是编译器也可以忽略

13。 func () const中的这个const, 必须出现在定义以及声明中

14。 函数重载时的函数匹配原则:

           a. 函数名字和域要要匹配 b. 参数个数要匹配 c. 最佳的参数类型匹配

            c.1  完全类型匹配最优先

            c.2 把其他整形转为 int 次之

            c.3 普通基本类型转换  再次之  c.4 class转换 最后考虑

15。 class里声明为inline的函数,定义时可以不写inline

16。 成员函数可以用 func() const这个const的有无来重载

17。  mutable 用于在const对象中仍然可以修改某些成员

18。  定义时用了explicit, 那么传递参数时必须显示生成对象参数。 换句话说编译器不会试图去用这个类的某个初始化函数来隐式构造一个对象然后传给函数

19。 const static的整数类型可以在class的内部初始化,不需要写在全局中

20。 "="是拷贝对象初始化,const objType &是这个初始化函数的参数

21。 不能重载的符号   ::   .*   .  ?:

22。 操作符重载后仍然是固定优先级和结合性

24。 如果 || &&被重载,将不能用来做短路计算

25。 ->的重载:

       a.    a->b();  当a是指针,b是成员函数时,正常

       b.   当a是对象,有->重载,则变为 a->()->b();

26。 ++前缀的重载无参数; 后缀的重载有int 参数,但是没有用

27。 类型转换重载:  operator  类型 ()

28。  virtual是运行时绑定, 否则是编译时绑定

29。  子类只能通过子类对象来访问父类的protected成员

30。  virtual 函数 如果返回一个类的引用,子类的这个函数可以返回子类的引用,并且仍然算是重载父类的这个虚函数

31。  default参数的值由调用的引用对象决定。 如果是父类的引用调用,就是父类的default,否则就是子类的

32。  继承时,用using 父类::成员 来恢复原来的权限级别

33。  class默认为私有继承, struct为公有继承

34。  友员不继承

35。  static成员在整个继承结构中都只有一个实例

36。  构造函数: 先基后子; 析构: 先子后基

37。  构造函数和析构函数中对虚函数的调用都是当前类的,不是子类的。 因为在构造函数中,子类还没初始化完; 而在析构中,子类又已经销毁完毕

38。  模板的内联写法是inline出现在template<>之后

39。  模板类用时需知名类型参数,但是模板函数不用

40。  模板在C++中分三个阶段建立:

         a.  模板定义的编译

         b.  引用模板处的代码检查, 此时仍然不生成具体代码

         c.  实例化模板, 链接时进行

41。  模板不会自动做类型参数转换。 不过,可以转const (对引用); 忽略const (对对象);转对象指针; 不可转数组指针。 

42。  函数指针赋值时可以实例化模板

43。 func<T,S,U>(。。。)这样就显示地调用了某个特定实例

44。  成员函数的模板定义:

       template<class T> 返回类型  类名称<T>::成员名称(... )

45。如果一个模板类有static成员,那么它的每个实例都有自己的这个static成员

46。如果想要模板函数对于某个特定实例有不同的实现,可以如下:

      template<... >    func <specific types> (...) {....} 从而显示定义了这个特定实例的实现

47。  new (指针) 类型 (参数), 对一块内存进行了这个类的一个初始化。

48。  class的操作符 new 函数返回void *,参数是size_t

49。  dynamic_cast: 有运行时类型检查, 只有含有虚函数的类用这个才有意义, 不成功返回值为0

50。 用dynamic_cast可以转引用, 不成功会抛出异常

51。  成员变量指针:    type class::*    成员函数执政:   type (class::*) (...)

52。  union里不能有静态成员,不能有引用,也不能有类

53。  union类似struct可以继承,可以定义函数,但是不可以有虚函数

posted on 2010-11-09 12:50  星云外  阅读(474)  评论(0编辑  收藏  举报