c++函数的高级特性

来源:互联网 发布:js中使用contextpath 编辑:程序博客网 时间:2024/05/21 16:57

C++函数的高级特性

C++中增加了重载(overload),内联(inline),const,virtual四种新机制。其中重载和内联机制既可以用于全局函数,也可以用于类的成员函数,const 和virtual 机制仅用于类的成员函数。

1.函数重载

C++采用重载的理由

l 可以将语义,功能相似的几个函数用同一个名字表示,即函数重载。这样提高了函数的易用性。

l 类的构造函数需要重载机制。C++中构造函数只能有一个名字,必须与类同名。

实现重载

函数的两大元素:参数和返回值

如果同名函数的参数不同,则很容易区分出他们是不同的函数,如果同名函数仅仅是返回值类型不同,有时候可以区分,但有时候却不能,在c++中有时候可以忽略返回值,,所以只能靠参数而不能靠返回值来区分重载函数,

如果c++程序要调用已经编译的c语言函数

void  foo(int x, int  y);

该函数在c编译器编译之后在库中的名字为_foo,而c++则会产生_foo_int_int之类的名字来支持函数重载和类型安全检查,由于编译之后的名字不同,c++程序不能直接调用c函数,c++提供了一个c连接指定符号extern “C”,告诉编译器函数foo是个c连接,应该在库中寻找_foo而不是_foo_int_int 

!!!!不是就两个函数名字相同就是重载,全局函数和类的成员函数同名不算重载,因为函数的作用域不同,如果某个类的某个成员函数要调用全局函数,

为了与成员函数区分,前面加“::”标志。

注意隐式转换导致重载函数产生二义性



2.参数的缺省值

有一些参数的值在每次函数调用的时候都相同,每次书写就会比较麻烦,c++语言采用参数的缺省值会使书写变得简洁

u 参数缺省值只能出现在函数的声明中,不能出现在函数的定义中

void foo(int x=0, int y=0) ;

原因:函数的实现(定义)与参数是否有缺省值无关,所以没有必要让函数的缺省值出现在函数的定义体中。 参数的缺省值可能会改动,修改函数声明中的值比修改函数定义中方便。

u 如果有多个参数,应该从后到前挨个缺省

u 使用参数的缺省值并没有赋予函数新的功能,仅仅是为书写简洁,可能会提高函数的易用性,也可能会降低函数的可理解性,所以只能适当的使用函数的缺省值。不合理的使用参数的缺省值可能导致重载函数产生二义性。



0 0
原创粉丝点击