标签:oid 建立 成员函数 ++ 默认 返回 不一致 之间 析构函数
一、函数重载--用相同的函数名定义一组功能相同或类似的函数,程序的可读性增强
1函数重载:在实际的开发中需要定义几个功能类似而参数类型不同的函数那么这样的几个函数可以使用相同的函数名,这就是函数的重载。简言之就是一个函数名可以有多种用途。
2.函数重载提高了程序的可读性,函数参数列表的不同包括:参数的个数不同,类型不同,或顺序不同,仅仅参数名称不同是不可以的,函数的返回值也不能作为重载的依据。
3.函数重载的规则:
4.C++是如何实现函数重载的
1.C++代码在编译的时候会根据参数列表进行重命名,例如void swap(int a,int b)会被重命名为_swap_int_int,,,void swap(float x,float y)会被重命名为_swap_float_float。当发生函数调用时,编译器会根据传入的实参去逐个匹配,以选择对应的函数,如果匹配失败,编译器就会报错,这叫做重载决议。
2.函数的重载仅仅是语法上的不同,本质上还是不同的函数,占用的内存不同,函数的入口地址也不同。
1 int sum(int a,int b) 2 double sum(double a,double b) 3 float sum(float a,float b,float c)
二、 C++函数缺省参数
1.默认参数:在定义函数时为形参指定默认值(缺省值),这样函数在调用时,对于默认参数可以给出实参值也可以不给出实参值。如果给出实参值,将实参传递给形参进行调用,如果不给出实参,则按默认值进行调用。
2.默认参数的函数调用:默认实参并不一定是常量表达式,可以是任意表达式甚至可以通过函数调用给出,如果默认实参是任意表达式,则函数每次调用时该表达式被重新求值。但表达式必须有意义。
3.默认的参数可以有多个,但所有默认参数必须放在参数表的右侧,即先定义所有的非默认参数,再定义默认参数。这是因为在函数调用时,参数自左向右逐个匹配,当实参与形参个数不一致时只有这样才不会产生二义性。
4.在同一作用域内,一个参数只能被指定一次默认值,不可以在声明和定义中同时指定默认值,即使默认值一样也不行。习惯上,缺省参数在公共头文件包含的函数声明中指定,否则缺省函数只能用于包含该函数定义的文件中的函数调用。
5.在调用具有默认参数的函数时,若某个实参默认,其右边的所有实参都应该默认
int fun(int i1=1,int i2=2,int i3=3); //调用函数 fun();//正确全为默认值 fun(3);//正确 i1=3,i2=2,i3=3 fun(3,,4);//正确i1=3,i2=4,i3=3 fun(2,3,4);//正确 i1=2,i2=3,i3=4 fun(,6,7);错误i1为默认,i2,i3都不是默认
三、C++内联函数------------ --本质是节省时间消耗空间
1.内联函数的引入
2.内联函数的定义
在函数声明前加inline
在函数定义前加inline
3.内联函数的调用
4.只有当函数只有10行甚至更少时才将其定义为内联函数。内联是以代码膨胀(复制)为代价的,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间相比较于函数调用的的开销较大,那么效率就不明显了,而且每一处内联函数的调用都要复制代码,使程序的总代码量增加,消耗更多的内存空间。
1 class A 2 { 3 public: 4 void fun(int x,int y){}//定义在类声明中,自动的成为内联函数 5 }
将成员函数的定义放在类声明之中虽然能带来书写上的方便,但不是良好的编程风格,上例应该改为
1 //头文件 2 class A 3 { 4 public: 5 void fun(int x,int y); 6 } 7 //定义头文件 8 inline void A::fun(int x,int y) 9 { 10 11 }
类的构造函数与析构函数容易让人误以为内敛更有效,但应该注意构造函数与析构函数中可能隐藏的一些行为,如偷偷地执行了基类或成员对象的构造函数与析构函数。所以不要将构造函数与析构函数的定义放在类声明中。一个好的编译器会根据函数的定义题,自动的取消不值得的内联。
标签:oid 建立 成员函数 ++ 默认 返回 不一致 之间 析构函数
原文地址:https://www.cnblogs.com/southcyy/p/10252324.html