C++中编译期多态机制和运行期多态机制之间的区别

函数由函数名、参数个数、参数类型、返回值和调用方式等组成。

函数签名:把函数名去掉之后函数的剩余部分(参数个数、参数类型、返回值和调用方式等)。

顶层函数:在类之外声明并定义的函数称为顶层函数。

成员函数:在类的声明中声明的函数称为类的成员函数。


重载:如果顶层函数有不同的参数,它们的函数名可以相同;在一个类中,成员函数可以有相同的函数名,只要它们的函数签名不同即可,我们将这种情况成为重载。


重载编译期绑定相对应,不管是成员函数还是顶层函数。

多态函数指的是在运行期进行绑定的函数,在C++中,仅有虚函数是在运行期进行绑定的,因此仅有虚函数才具有真正意义上的多态。


代码用例如下

class C{
public:
	C(){/*...*/}          //default constructor
	C(int x){/*...*/}     //convert constructor	
};

void f(double d){/*...*/}
void f(char c){/*...*/}

int main(){
	C c1;      //default constructor called  
	C c2(26);  //convert constructor called
	f(3.14);   //f(double d) called
	f('Z');    //f(char c) called
	//...
}
在上面的代码段中,有两个名为f的顶层函数和两个名为c的构造函数。对于这四个函数而言,编译器使用的都是编译期绑定。编译器依据函数签名来进行绑定,因此由于创建对象c1时没有指定初值,编译器调用默认构造函数,而创建对象c2时指定了一个整型的初值,编译器调用转型构造函数。

同样,编译器将下面的调用

f(3.14);

绑定到以单个double型为参数的f函数上,而对调用

f('Z');

则绑定到以单个字符char型为参数的f函数上。

在进行重载时,总是使用编译期绑定,在这方面重载函数(不管是成员函数还是顶层函数)和虚函数是截然不同的,虚函数总是在运行期绑定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值