当前位置: 首页 > news >正文

深入解析:C++的第十三天笔记

重载解析

“重载解析” 是编译器从多个同名函数中,选择与当前调用最匹配的函数的过程 。是C++函数重载的核心机制。

  1. 创建函数列表:其中包含与被调函数名称相同的函数和模板函数。

  2. 筛选可行函数:使用候选函数列表创建可行函数列表。这些都是参数数目正确的函数,且实参类型能通过 C++ 允许的隐式转换,变成形参类型。

  3. 确定是否有最佳的可行函数。有则调用无则报错。

    优先级从高到低如下

    1. 完全匹配(常规函数优先于模板)

    2. 提升转换(例如:char和short自动转换为int,float自动转换为double)(不会出现数据溢出和精度丢失)

    3. 标准转换(例如:int转换为char,long转换为double)(可能会出现数据溢出和精度丢失)

    4. 用户自定义转换(例如:类声明中定义的转换)

如果最高优先级的函数是多个,必然会二义性报错。(提升转换和标准转换同级之间转换参数越少优先级越高)

#include 
 using namespace std;
 ​
 // 函数A:3个参数,调用时需3次提升转换(char→int、float→double、short→int)
 void func(int a, double b, int c) {
     cout << "func(int, double, int)(3次提升转换)" << endl;
 }
 ​
 // 函数B:3个参数,调用时需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_cast(a);   // char→int(提升)
 double b2 = static_cast(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 
 #include 
 ​
 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> 头文件

http://www.jsqmd.com/news/338257/

相关文章:

  • Java中的代码块
  • 25. 屏幕像素和纹理像素不匹配
  • 端侧识物+离线翻译轻量化模型选型表
  • 2026年评价高的冷却塔改造公司推荐:冷却塔改造、昆山良机冷却塔、圆形冷却塔、常州良机冷却塔、方型冷却塔、良机冷却塔厂家选择指南 - 优质品牌商家
  • 每天给AI写10000字小作文后,我学到了什么
  • 万物识物的模型规模、多国语言翻译的词库/模型体量在端侧本地模型可以放下吗?
  • APUE笔记:Standard I/O Library(五) - Invinc
  • 运维人别硬扛!转行网安,把熬夜受的气全找补
  • 2026年豆干品类推荐:四川圆豆豆食品麻辣/特色/圆豆豆/五香/泡椒/花椒豆干全系供应 - 品牌推荐官
  • Java中,方法/类的修饰符的书写位置
  • 2026年落地式篮球架厂家推荐:壁挂式篮球架/悬空式篮球架厂家精选 - 品牌推荐官
  • 2026年海光计算产品厂家推荐:北京集特智能科技有限公司,海光3450台式机/海光工控机/海光5380服务器等全系供应,适配政务办公、智能制造与数据中心多场景 - 品牌推荐官
  • 【必藏干货】AI Agent智能体架构设计全攻略:从理论到实战,构建企业级解决方案
  • 电脑提示msvcp140.dll缺失/报错?2026最新解决方法,小白也能1分钟搞定! - PC修复电脑医生
  • iPhone 13 Pro 深度解析:配色外观|核心参数|ProMotion 屏幕|影像与视频|续航与充电|官方维修手册要点|二手验机避坑清单(图文版)
  • “新”意十足 · HarmonyOS模板组件(本次上新:面包屑、验证码、超链接、签名、水印等组件)
  • 2026年昆山良机冷却塔厂家权威推荐榜:冷却塔改造/昆山良机冷却塔/常州良机冷却塔/方型冷却塔/良机冷却塔厂家/选择指南 - 优质品牌商家
  • iPhone 12 Pro 深度解析:配色外观|核心参数|摄影/视频|续航与MagSafe|维修手册要点|二手验机避坑清单(图文版)
  • 智慧城市、能源等优质学术会议分享!
  • 2026苏州婚纱摄影机构推荐:华纳婚纱摄影与姑苏区星纳摄影店,专业拍摄与礼服全解析 - 品牌推荐官
  • 一张图看懂网络空间安全:从网络层到应用层的“防护圈”都有哪些?
  • 2026年geo推广服务推荐:上海俐麸信息科技,本地geo/优化/AIgeo推广全链路解决方案 - 品牌推荐官
  • iPhone 12 深度解析:配色外观|核心参数|MagSafe/充电续航|维修手册要点|二手验机避坑清单(图文版)
  • MySQL 分库分表
  • 2026年展览展台搭建厂家推荐:重庆觉觅文化传播有限公司,展览制作/活动搭建一站式服务 - 品牌推荐官
  • 家用空气能取暖哪个牌子好?关键看这4 大核心要点! - 资讯焦点
  • 别再当“社会NPC”:Human 3.0 时代的 5 个颠覆性进化指南
  • linux设置永久制表符宽度
  • 使用arc_unpack解包exe教程
  • 2026陕西同城搬家服务指南:如何识别规范企业?五家参考案例解析 - 深度智识库