【c++ primer, 5e】函数匹配】的更多相关文章

<C++ Primer>笔记,整理关于函数重载与函数匹配的笔记. 函数重载 void func(int a); //原函数 void func(double a); //正确:形参类型不同 void func(int a, int b); // 正确:形参个数不同 int func(int a); //错误:只有返回类型不同 typedef int int32; void func(int32 a); //与原函数等价:形参类型相同 void func(const int a); //与原函数…
Case void f(); void f(int); void f(int, int); void f(double, double = 3.14); 匹配原则: 1)其形参数量与本次调用提供的实参数量相等 2)每个实参的类型与对应的形参类型相同,或者可以转换成形参的类型; 寻找最佳匹配: 1)该函数每个实参的匹配都不劣于其他可行函数需要的匹配; 2)至少有一个实参的匹配优于其他可行函数提供的匹配; 例子: a) f(); b) f(); c) f(,); d) f(3.9,9.8); a)可…
/*ca69a.cpp_c++_函数匹配(重载确定)#重载确定的三个步骤1.候选函数2.选择可行函数3.寻找最佳匹配(如果有的话)#含有多个形参的重载确定 void f1();void f1(int);void f1(int,int);void f1(double,double = 3.14);f1(5,6) //调用void f1(double,double) 一.确定候选函数和可行函数 函数匹配的第一步是选择本次调用对应的重载函数集,集合中的函数成为候选函数. 候选函数特征: 1.与被调函数…
练习 6.49 候选函数:与所调用的函数的名字相同的函数的集合. 可行函数:给候选函数加上参数数量.参数类型的约束所得到的函数的集合. 6.50 a 3.4可行,二义匹配 b 2.4可行,2是最佳匹配 c 3.4可行,3是最佳匹配 d 3.4可行,4是最佳匹配 6.51 测试代码: #include <iostream> using namespace std; void f() { cout << "f1" << endl; } void f(in…
p182~p185: 函数1.在调用函数和执行return语句的同时,也发生了控制权的转移. 2.函数返回值不能是一个数组.(但是可以返回一个包含数组的对象,或者指向数组的指针) 3.重要概念:名字的作用域和对象的生命周期. 4.对象的生命周期分两种情况:一种是对象定义在函数体外部(包括main函数1),则对象将存在于程序的整个执行过程,第二种是对象定义在函数体内部,被称为自动变量(包括形参和普通局部变量),在块的末尾将被自动销毁. 5.局部静态对象的生命周期是程序的整个执行过程. 6.局部静态…
简单的示例: #include <iostream> using namespace std; int sum(int x, int y) { return x + y; } int main() { cout << sum(, ) << endl; int (*pf)(int, int); // 未初始化 pf = sum; cout << pf(, ) << endl; /* output: 3 7 */ ; } 遇到重载的情况,编译器通过指…
[函数重载] Java中的重载一般是指重载构造器,或是子类覆写父类的方法:C++中的重载稍微复杂一些. 定义重载函数 典型的数据库应用. Record lookup(const Account&); Record lookup(const Phone&); Record lookup(const Name&); 判断两个形参类型是否相异 1.声明的时候省略形参和没省略是等价的. 2.起了类型别名也改变不了本质. 重载和const形参 1.一个拥有顶层const的形参无法和另一个没有…
p186~p188: 函数声明1.函数只能定义一次,但是可以声明多次. 2.函数的接口:返回类型 + 函数名 + 形参类型 3.为什么要在头文件中进行函数声明???在源文件中定义?暂时理解到,这么做可以增强可读性. 4.含有函数声明的头文件应该被包含到定义函数的源文件中.(例如:#include "diy.h") 分离式编译 & 6.8 & 6.9 1.分离式编译:把源文件割成好几块放在不同的文件夹下.最终要生成可执行文件,就必须告诉编译器源文件在哪里.具体操作如下:…
练习 7.6 & 7.7 #include <iostream> #include <string> using namespace std; // Sales_data.h struct Sales_data { // public部分,对象看起来是怎么样的. std::string isbn() const { return bookNo; } // inline function Sales_data& combine(const Sales_data&…
编译器能以任意顺序对形参进行求值 函数的返回类型不能是数组类型和函数类型. 函数开始时为形参分配内存,一旦函数结束,形参也就被销毁了. 如果弄成静态局部变量,那么回到程序终止结束时才被销毁. void fo() { static int a ; //只在第一次初始化 a++; //保存了前次被调用后留下的值 return ; } //所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量 形参类型决定了形参与实参的交互方式 f(int a,int b) 被调…