C++语言99个常见编程错误 常见错误4:未能区分函数重载和形式参数默认值

常见错误4:未能区分函数重载和形式参数默认值
  函数重载和形式参数默认值之间其实无关系。不过,这两个独立的语言特征有时会被混淆,
因为它们会构建出语法上非常想像的函数语法接口。当然,看似一样的接口,背后的抽象
意义大相径庭。
  函数重载主要用于一组抽象意义相同,但实现不同的函数,而形式参数默认值主要出于简化,
为函数提供更间接的接口。函数重载和形式参数默认值是两个毫不相干的语言特征,它们出于不同

的目的而设计,行为也完全不同。  


c12.h
#ifndef C12_H
#define C12_H

class C1 {
  public:
    void f1( int arg = 0 ) {} // 一个形式参数的默认值
    //c1的使用者有两个选择,显示地给函数f1()一个实际参数,要么隐式地给函数f1()
	//一个世纪参数0,两个函数调用产生的动作序列是相同的。
};

class C2 {
  public:
    void f2() {}//c2有所不同。使用者的选择根据参数数目调用两个虽然名字
	//都叫f2(),却是完全不同的函数中的某一个。这个例子产生完全不同的动作序列
    void f2( int ) {}
    // ...
};

#endif


c12.cpp
#include "c12.h"

int main() {
	C1 c1;
	c1.f1(0);
	c1.f1();


	C2 c2;
	c2.f2(0);
	c2.f2();

	//void (C1::*pmf1)() = &C1::f1; //error! 
	//唯一名叫f1()的提供成员函数带有一个int类型的形式参数
	void (C2::*pmf2)() = &C2::f2;
	//c2类型的方法,决定了指向成员函数的指针pmf指向了没有带任何形式参数
	//的那个f2()函数。 pmf是个指向没有带任何形式参数的成员函数的指针,编译器能够
	//正确地选择第一个f2()作为它应该指向的函数。
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值