C++ Primer 有感(函数)

1.函数应该在头文件中声明,并在源文件中定义。(定义函数的源文件应包含声明该函数的头文件)将提供函数声明的头文件包含在定义该函数的源文件中,可使编译器能检查该函数的定义和声明是否一致。


2.既可以在函数声明也可以在函数定义中指定默认参数。但是,在一个文件中,只能为一个形参指定默认实参一次。下面的例子是错误的:

  //ff.h

int ff ( int i=0 );

  //ff.c

 #include "ff.h"

 int ff( int i= 0 ){ /* ......*/ }  //error

通常,应在函数声明中指定默认实参,并将该声明放在合适的头文件中。

如果在函数定义的形参表中提供默认实参,那么只有在包含该函数定义的源文件中调用该函数时,默认实参才是有效的


3.内联函数应该在头文件中定义,这一点不同于其他函数。

  内联函数能要在程序中定义不止一次,只要内联函数的定义在某个源文件中只出现一次,而且在所有源文件中,其定义必须是完全相同的。把内联函数的定义放在头文件中,可以确保在调用函数所使用的定义是相同的,并且保证在调用点该函数的定义对编译器可见。

  在头文件中加入或修改内联函数时,使用了该头文件的所有源文件都必须重新编译。


4.编译器隐式的将在类内定义的成员函数当作内联函数。


5.const对象,指向const对象的指针或引用只能用于调用其const成员函数,如果尝试用它们调用非const成员函数,则是错误的。


6.如果没有为一个类显式定义任何构造函数,编译器将自动为这个类生成默认构造函数。

  合成的默认构造函数一般适用于仅包含类类型成员的类。而对于含有内置类型或复合类类型成员的类,则通常应该定义他们自己的默认构造函数初始化这些成员。


7.如果两个函数声明的返回类型和形参表完全匹配,则将第二个函数声明视为第一个的重复声明。如果两个函数的形参表完全相同, 但返回类型不同,则第二个声明视错误的。

   在同一类中,对于函数名相同的const函数和非const函数能够构成重载,同时它们被调用的时机为:如果定义的对象时常对象,则调用的是const成员函数,如果定义的对象非常对象,则调用的重载的非const成员函数。

  重载函数的条件:

(1)相同的作用域

(2)函数名相同

(3)函数的形参表不同

(4)与函数的返回值无关

对于重载注意:

(1)形参与const形参的等价性仅适用于非引用形参;

(2)有const引用形参的函数与有非const引用形参的函数是不同;

(3)函数带有指向const类型的指针形参与带有指向相同类型的非const对象的指针形参的函数不相同。


8.函数指针只能通过同类型的函数(同类型包括参数和返回值)或函数指针或0值常量表达式进行初始化或赋值。(注意:指向不同函数类型的指针之间不存在转换)


9.C++语言允许 使用函数指针指向重载的函数。(注意:指针的类型必须与重载函数的一个版本精确匹配(精确匹配,包括参数和返回值,隐形转换都不行的)。如果没有精确匹配的函数,则对该指针的初始化或赋值都将导致编译错误)

posted on 2013-06-26 19:04  胡永光  阅读(117)  评论(0编辑  收藏  举报

导航