太原那有网站设计公司计算机网络工程师证书
2026/1/14 17:49:11 网站建设 项目流程
太原那有网站设计公司,计算机网络工程师证书,免费找素材软件,营销企业网站制作重载解析“重载解析” 是编译器从多个同名函数中#xff0c;选择与当前调用最匹配的函数的过程 。是C函数重载的核心机制。创建函数列表#xff1a;其中包含与被调函数名称相同的函数和模板函数。筛选可行函数#xff1a;使用候选函数列表创建可行函数列表。这些都是参数数目…重载解析“重载解析” 是编译器从多个同名函数中选择与当前调用最匹配的函数的过程 。是C函数重载的核心机制。创建函数列表其中包含与被调函数名称相同的函数和模板函数。筛选可行函数使用候选函数列表创建可行函数列表。这些都是参数数目正确的函数且实参类型能通过 C 允许的隐式转换变成形参类型。确定是否有最佳的可行函数。有则调用无则报错。优先级从高到低如下完全匹配常规函数优先于模板提升转换例如char和short自动转换为intfloat自动转换为double不会出现数据溢出和精度丢失标准转换例如int转换为charlong转换为double可能会出现数据溢出和精度丢失用户自定义转换例如类声明中定义的转换如果最高优先级的函数是多个必然会二义性报错。提升转换和标准转换同级之间转换参数越少优先级越高#include iostream using namespace std; ​ // 函数A3个参数调用时需3次提升转换char→int、float→double、short→int void func(int a, double b, int c) { cout func(int, double, int)3次提升转换 endl; } ​ // 函数B3个参数调用时需2次提升转换char→int、float→double第三个参数完全匹配 void func(int a, double b, short c) { // 第三个参数是short cout func(int, double, short)2次提升转换 endl; } ​ int main() { char a a; float b 3.14f; short c 10; // 第三个实参是short func(a, b, c); // B提升转化2次A3次。调用函数B //func(c,b,a);//AB均提升转换3次二义性错误 return 0; }自定义转换通过 static_cast 等显式转换获得同数据大小不同数据类型的数据使得新数据与目标函数的匹配度最高。void customSelect(char a, float b, short c)//A函数 void customSelect(int a, double b, int c) //B函数 ... char a a; float b 3.14f; short c 10; customSelect(a, b, c);//按优先级来看与A更匹配 int a2 static_castint(a); // char→int提升 double b2 static_castdouble(b); // float→double提升 ​ customSelect(a2, b2, c)//B函数提升转换A函数标准转换提升转换优先级高 ...内存模型和名称空间单独编译通常一个程序可以分为三部分。头文件包含结构声明和使用这些结构的函数的原型。源代码文件包含与结构有关的函数的代码。源代码文件包含调用与结构相关的函数的代码。不要将函数定义或者变量声明放到头文件中。头文件中一般包含函数原型使用#define或是const定义的符号常量。结构声明类声明模板声明内联函数如果头文件名包含在尖括号里面编译器会去存储标准头文件的文件系统里面找如果头文件名包含在双引号里面编译器会去当前工作目录的源代码目录里面找如果没有找到则在标准位置找。自己编写的头文件要使用引号而不是尖括号。如果同一个头文件比如coordin.h被多次#include到同一个源文件中会导致重复定义错误比如结构体、宏被定义两次编译会报错。// 无保护的头文件 test.h void func() { cout test endl; } ​ // main.cpp #include test.h #include test.h // 第二次包含触发“重定义错误” ​ int main() { func(); return 0; }解决方法在头文件开头写#ifndef 标识符意为如果这个标识符没被定义过。紧接着写#define 标识符意为定义这个标识符。把头文件的实际内容写在这两行下面。后写#endif结束条件判断。//编写头文件coordin.h #ifndef COORDIN_H //检查COORDIN_H是否被定义 #define COORDIN_H //定义COORDIN_H ​ //头文件内容 struct rect { double x; double y; }; // 极坐标结构体 struct polar { double distance; double ang; }; polar rect_to_polar(rect xypos);// 声明坐标转换函数对外暴露接口 ​ #endif //结束#ifndef判断#include coordin.h #include cmath #include iostream ​ polar rect_to_polar( rect xypos) { using namespace std; polar answer; answer.distance sqrt( xypos.x * xypos.x xypos.y * xypos.y ); answer.ang atan2( xypos.y,xypos.x ); return answer; } ​atan2(y,x)函数返回弧度制的辐角。使用需包含cmath头文件

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询