C高级(5)--C++函数的高级特性

对比于C 语言的函数,C++增加了重载(overloaded)、内联(inline)、const 和virtual

四种新机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const 与

virtual 机制仅用于类的成员函数。

1.重载

重载是如何实现的?

同名函数,只是检查函数参数个数、类型、顺序。无法通过返回类型来判断其他都相同的函数。

EX:C函数声明如:  void  foo(int x, int y);

由于C中不存在重载,C编译器翻译后在库中的名字为_foo,而C++编译器翻译就会像_foo_int_int的名字来支持函数重载和类型安全连接。

类成员调用全局函数应加::  EX:   ::print()即调用全局函数

2.重载、覆盖与隐藏

重载特性:同一个类中、函数名字相同、参数不同、virtual关键字可有可无。

覆盖特性:派生类覆盖基函数。

不同类:基类与派生类中、函数名字相同、参数相同、基类函数必须有virtual关键字。

隐藏特性:指派生类函数屏蔽了与其同名的基类函数。分为如下2种情形:

A.派生类函数与基类函数同名,但参数不同,此时不管有无virtual关键字,基类函数被隐藏。(注意与重载别混淆)

B.派生类函数与基类函数同名,参数也相同,但是基类没有virtual关键字,此时基类函数被隐藏(注意与重载别混淆)

3.参数的缺省值

一些参数的值在每次调用时都相同,书写这样的语句会使人厌烦。缺省值由编译器自动插入。缺省值出现在函数的声明中。参数只能从后向前挨个儿缺省。

4.运算符重载

Complex operator +(const Complex &a, const Complex &b);

5.函数内联

用内联取代宏代码:目的是提高执行效率。

在C中使用宏提高执行效率。宏本身不是函数。预处理使用复制宏代码方式代替函数调用,省去了参数压栈、生成汇编语言的call调用、返回参数、执行return语句。但是宏可能产生边际效应出错。

在C++中内联函数代码放在符号表中,调用内联函数时,编译器先进行类型安全检查、自动类型转换、替换函数调用。内联函数比宏安全。==宏的效率+安全性。其中assert是宏,在debug和release版本中,不会引起内存、代码的改变(即无副作用)。

内联必须与函数定义一起使用才生效,若是声明中内联无效。是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。

类中的成员函数自动生成为内联函数,即inline是省略没写。所以C++代码执行效率高。

不宜使用内联的情况:代码较长,复制代码时间较长。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值