(学习日记)2024.02.01:引用变量 / 默认实参 / 一元作用域运算符 / 函数重载

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

2024.02.01

  • 一、C++:&——引用变量
  • 二、C++:默认实参
  • 三、C++:::——一元作用域运算符
  • 四、C++:函数重载

一、C++:&——引用变量

引用变量是一个巨有用,巨简洁的传递变量用法,类似于指针,但更简洁。

引用变量是用 & 符号来声明的。如果学过C语言的同学,可能知道 & 可以获取变量的地址,但是C++给 & 符号赋予了另一个函数——声明引用变量。例如,要将 b 作为 a 变量的别名,可以这么做:

int a;
int &b = a; // b 是 a 变量的别名

其中,&不是地址运算符,而是类型标识符的一部分。就类似声明 char* 指的是指向 char 的指针一样, int &指的是指向 int 的引用。
上述引用声明完后,a和b就指向相同的值和内存单元(即b是a变量的别名)。

#include <iostream>
using namespace std;
int main()
{int a = 5;int& b = a;cout << "a = " << a << ", a address: " << &a << endl;cout << "b = " << b << ", a address: " << &b << endl;return 0;
}

在这里插入图片描述
可以看到,变量a b的地址都是一样的,换句话说,就是a就是b

大家可以在下面实验:

  1. 如果我们用指针写一个交换两个数的函数,代码如下:
#include<stdio.h>void Swap(int* a, int* b) {int tmp = *a;*a = *b;*b = tmp;
}int main() {int a = 5;int b = 3;Swap(&a, &b);printf("a = %d\nb = %d",a,b);return 0;
}

结果为:
在这里插入图片描述

本函数需要在Swap函数中频繁的使用 *,并且Swap函数中a和b本质上是形参。

  1. 那么如果用 引用变量 来写呢:
#include<stdio.h>void Swap(int& x, int& y) {int tmp = x;x = y;y = tmp;
}int main() {int a = 5;int b = 3;Swap(a, b);printf("a = %d\nb = %d",a,b);return 0;
}

结果如下:
在这里插入图片描述
可以看到,程序简洁了很多

  1. 何时使用引用参数
一、传递值而不修改值(尽量 const 修饰)1、内置数据类型:由于较小,可直接按值传递;2、数组:采用 const 修饰的指针;3、较大的结构:使用 const 指针或 const 引用,可提高效率、节省时间空间;4、类对象:const 引用。二、需要修改原数据1、内置数据类型:可使用指针;2、数组:只能使用指针;3、较大的结构:使用指针或引用;4、类对象:const 引用。
  1. 引用这么高效为什么内置类型不使用引用呢?
    《Effective C++》条款20:宁以pass by reference to const替换pass by value。
    其中有这么一句“如果你有个对象属于内置类型(例如int) pass by value 往往比 pass by reference 的效率高些”。
    说白了就是自己的东西用的更顺手一些。

参考资料:
C+±–引用变量(&)
C++——引用变量
C++ | 引用变量

二、C++:默认实参

某些函数有这样一种形参, 在函数的很多次调用中它们都被赋予一个相同的值, 我们把这个反复出现的值称为函数的默认实参。

调用含有默认实参的函数时, 可以包含该实参, 也可以省略该实参。

对于有多个形参的函数, 必须从右向左添加默认值。
在这里插入图片描述
在这里插入图片描述

三、C++:::——一元作用域运算符

在C ++中,作用域运算符为::
它用于以下目的。

  1. 当存在具有相同名称的局部变量时,要访问全局变量:
// C++ program to show that we can access a global variable 
// using scope resolution operator :: when there is a local  
// variable with same name  
#include<iostream>  
using namespace std; int x;  // Global x int main() 
{ int x = 10; // Local x cout << "Value of global x is " << ::x; cout << "\nValue of local x is " << x;   return 0; 
} 

输出:
全局x的值为0
本地x的值为10

  1. 在类之外定义函数。
// C++ program to show that scope resolution operator :: is used 
// to define a function outside a class 
#include<iostream>  
using namespace std; class A  
{ 
public:  // Only declaration void fun(); 
}; // Definition outside class using :: 
void A::fun() 
{ cout << "fun() called"; 
} int main() 
{ A a; a.fun(); return 0; 
} 

输出:
fun() called

  1. 访问一个类的静态变量。
// C++ program to show that :: can be used to access static 
// members when there is a local variable with same name 
#include<iostream> 
using namespace std; class Test 
{ static int x;   
public: static int y;    // Local parameter 'a' hides class member // 'a', but we can access it using :: void func(int x)   {  // We can access class's static variable // even if there is a local variable cout << "Value of static x is " << Test::x; cout << "\nValue of local x is " << x;   } 
}; // In C++, static members must be explicitly defined  
// like this 
int Test::x = 1; 
int Test::y = 2; int main() 
{ Test obj; int x = 3 ; obj.func(x); cout << "\nTest::y = " << Test::y; return 0; 
} 

输出:
静态x的值为1
本地x的值为3
测试:: y = 2

  1. 如果有多个继承:
    如果两个祖先类中存在相同的变量名,则可以使用作用域运算符进行区分。
// Use of scope resolution operator in multiple inheritance. 
#include<iostream> 
using namespace std; class A 
{ 
protected: int x; 
public: A() { x = 10; } 
}; class B 
{ 
protected: int x; 
public: B() { x = 20; } 
}; class C: public A, public B 
{ 
public: void fun() { cout << "A's x is " << A::x; cout << "\nB's x is " << B::x; } 
}; int main() 
{ C c; c.fun(); return 0; 
}

输出:
A的x是10
B的x是20

  1. 对于命名空间
    如果两个命名空间中都存在一个具有相同名称的类,则可以将名称空间名称与作用域解析运算符一起使用,以引用该类而不会发生任何冲突
// Use of scope resolution operator for namespace. 
#include<iostream> 
int main(){ std::cout << "Hello" << std::endl;
} 

在这里,cout和endl属于std命名空间。

  1. 在另一个类中引用一个类:
    如果另一个类中存在一个类,我们可以使用嵌套类使用作用域运算符来引用嵌套的类
// Use of scope resolution class inside another class. 
#include<iostream> 
using namespace std; class outside 
{ 
public: int x; class inside { public: int x; static int y;  int foo(); }; 
}; 
int outside::inside::y = 5;  int main(){ outside A; outside::inside B; } 

在这里插入图片描述

四、C++:函数重载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/662374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ChatGPT】文本向量化与余弦相似度:揭开文本处理的神秘面纱(5)

1、引言 在这个数字化的时代&#xff0c;我们每天都会面对大量的文本信息&#xff0c;从社交媒体到新闻报道&#xff0c;文本无处不在。但是&#xff0c;计算机要如何理解和处理这些文字呢&#xff1f;本文将为大家揭开其中的一些奥秘&#xff0c;详细解释文本向量化的概念&am…

postgresql|数据库|pg_repack插件的部署和使用

一&#xff0c; 表和索引的膨胀现象 Postgres SQL 实现的MVCC的机制不同于 oracle &#xff0c; mysql innodb 的 undo tablespace 的机制。 表上所用的更新和删除等操作的行为&#xff0c;都不会实际的删除或修改&#xff0c;而是标记为死元祖 &#xff08;dead rows or dead…

3D应用开发平台HOOPS Platforms优化制造流程和数字化转型

Tech Soft 3D公司的HOOPS Platform &#xff08;包括HOOPS Native Platform 和HOOPS Web Platform&#xff09;&#xff0c;是一种用于开发顶级3D软件的集成技术。具有高性能3D图形&#xff0c;准确&#xff0c;快速的CAD数据转换&#xff0c;3D数据发布以及与流行的建模内核的…

微分几何——梅向明第四版学习笔记(一) 向量函数和曲线论

目录 引出向量函数曲线论简单曲线定义曲线的向量参数表示 曲线的切线【重要】曲线的法面【重要】曲线的自然参数表示 空间曲线曲线的密切平面空间曲线的基本三棱形【重要】单位切向量主法向量副法向量Frenet标架螺旋线的案例 曲线的曲率和曲率半径曲率的几何意义 曲线的挠率挠率…

玻璃钢制品三维扫描机械抄数全尺寸检测服务对比测量检查重合度

玻璃钢制品是一种广泛应用于建筑、汽车、航空航天等领域的复合材料。其制作过程中&#xff0c;需要确保每个环节的精确度&#xff0c;以确保最终产品的质量和性能。为了实现这一目标&#xff0c;三维扫描仪在玻璃钢制品的生产过程中发挥着至关重要的作用。 CASAIM中科广电高精度…

2024美赛数学建模A题思路分析 - 资源可用性和性别比例

1 赛题 问题A&#xff1a;资源可用性和性别比例 虽然一些动物物种存在于通常的雄性或雌性性别之外&#xff0c;但大多数物种实质上是雄性或雌性。虽然许多物种在出生时的性别比例为1&#xff1a;1&#xff0c;但其他物种的性别比例并不均匀。这被称为适应性性别比例的变化。例…

BC1.2 SDP/CDP/DCP介绍

参考&#xff1a;文章链接 Microchip Lightning Support 问题 Q1.) 在Microchip产品的数据表中提到了电池充电技术&#xff0c;但以下术语是什么意思: BC1.2? SDP? CDP? DCP? “SE1”? Q2.) 如何配置Microchip Hub以启用这些功能&#xff1f; Q3.) 如何在我的硬件上物…

基于QPSO-LSTM的短期风电负荷MATLAB预测程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 参考文献 基于QPSO-LSTM的短期风电负荷预测模型——谭才兴&#xff08;完全复现&#xff09; 程序简介 传统的LSTM神经网络超参数和拓扑结构通常是基于经验和试验确定&#xff0c;但这种方法容易受到人为因…

学习嵌入式第十五天之结构体

用变量a给出下面的定义 a) 一个整型数&#xff08;An integer&#xff09; //int a;b) 一个指向整型数的指针&#xff08;A pointer to an integer&#xff09; //int *a;c) 一个指向指针的的指针&#xff0c;它指向的指针是指向一个整型数&#xff08;A pointer to a poin…

Leetcode—2950. 可整除子串的数量【中等】Plus(前缀和题型)

2024每日刷题&#xff08;一零八&#xff09; Leetcode—2950. 可整除子串的数量 算法思想 让 f ( c ) d , 其中 d 1 , 2 , . . . , 9 f(c) d, 其中d 1, 2, ..., 9 f(c)d,其中d1,2,...,9. // f(c1) f(c2) ... f(ck) / k avg // > f(c1) f(c2) ... f(ck) - …

[opencvsharp]C#基于Fast算法实现角点检测

角点检测算法有很多&#xff0c;比如Harris角点检测、Shi-Tomas算法、sift算法、SURF算法、ORB算法、BRIEF算法、Fast算法等&#xff0c;今天我们使用C#的opencvsharp库实现Fast角点检测 【算法介绍】 fast算法 Fast(全称Features from accelerated segment test)是一种用于角…

Docker 集群配置

1、配置 MySQL MySQL 简单安装 docker安装完MySQL并run出容器后&#xff0c;建议请先修改完字符集编码后再新建mysql库-表-插数据 docker run -d -p 2222:3306 --privilegedtrue -e MYSQL_ROOT_PASSWORD123456 \ -v /opt/mysql/log:/var/log/mysql \ -v /opt/mysql/data:/va…

Spring:JDBCTemplate 的源码分析

一&#xff1a;JdbcTemplate的简介 JdbcTemplate 是 Spring Template设置模式中的一员。类似的还有 TransactionTemplate、 MongoTemplate 等。通过 JdbcTemplate 我们可以使得 Spring 访问数据库的过程简单化。 二&#xff1a;执行SQL语句的方法 1&#xff1a;在JdbcTempla…

前端性能优化:Vue项目打包后app.xxx.js 和 chunk-vendors.xxx.js 文件太大,导致页面加载时间太长

问题场景&#xff0c;如下图&#xff0c;环境上的 app.js 和chunk-vendors.js 两个文件大小&#xff0c;高达3.4M 和 2M &#xff0c;加载所耗费的时间也很长。 下面说一下如何解决&#xff1a; 1、首先需要安装插件 compression-webpack-plugin&#xff0c;我这里用的是6.1.1…

情人节送什么礼给男朋友合适?适合送男友的礼物合集

情人节即将来临&#xff0c;作为贴心的女友&#xff0c;你是否已经开始为男友精心挑选礼物了呢&#xff1f;为了让这个特殊的日子充满温馨与甜蜜&#xff0c;选择一份既实用又充满心意的礼物是至关重要的&#xff0c;下面为大家推荐一些适合在情人节送给男友的好物&#xff0c;…

探索自然语言处理在改善搜索引擎、语音助手和机器翻译中的应用

文章目录 每日一句正能量前言文本分析语音识别机器翻译语义分析自然语言生成情感分析后记 每日一句正能量 努力学习&#xff0c;勤奋工作&#xff0c;让青春更加光彩。 前言 自然语言处理&#xff08;NLP&#xff09;是人工智能领域中与人类语言相关的重要研究方向&#xff0c…

腾讯主导制定全球首个车载小程序国际标准,助力车载应用生态发展

2024年1月&#xff0c;国际电信联盟标准部门&#xff08;ITU-T&#xff09;正式发布了由腾讯主导制定的《F.749.8 In-vehicle multimedia applets: Framework and functional requirements》(车载多媒体小程序框架和技术需求)国际标准。 这是全球首个由中国企业主导制定的车载小…

LNMP环境搭建动态网站

一、环境准备 服务器&#xff1a;openEuler 22.03 Linux IPV4 &#xff1a;192.168.110.144/24 网页服务器&#xff1a;Nginx1.21.0 数据库&#xff1a;MySQL 8.0.36 PHP&#xff1a;8.0.30 1.安装软件 [rootnode3 ~]# yum install php-mysqlnd php php-gd php-fpm php-xml -y…

在ESXi中部署时出现the host does not support intel vt-x

在VCenter中新建了一台ESXi用于部署VCSA进行实验 在部署VCSA的第二阶段&#xff0c;出现the host does not support intel vt-x&#xff0c;部署失败。 解决办法&#xff1a;点进ESXi虚拟机的设置界面&#xff08;要先关机&#xff09;&#xff0c;将硬件虚拟化打开&#xff0c…

【Vue3+Vite】路由机制router 快速学习 第四期

文章目录 路由简介路由是什么路由的作用 一、路由入门案例1. 创建项目 导入路由依赖2. 准备页面和组件3. 准备路由配置4. main.js引入router配置 二、路由重定向三、编程式路由(useRouter)四、路由传参(useRoute)五、路由守卫总结 路由简介 路由是什么 路由就是根据不同的 URL…