首页 > 编程语言 >C++取经之路(其二)——含数重载,引用。

C++取经之路(其二)——含数重载,引用。

时间:2024-03-28 23:29:05浏览次数:30  
标签:cout int c++ C++ 含数 引用 重载 函数

含数重载:

函数重载是指:在c++中,在同一作用域,函数名相同,形参列表不相同(参数个数,或类型,或顺序)不同,C语言不支持

举几个例子:

1.参数类型不同


int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
}
double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
}

2.参数个数不同

void f()
{
	cout << "f()" << endl;
}
void f(int a)
{
cout << "f(int a)" << endl;
}

3.参数顺序不同

void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}

为什么只有c++支持?

我们知道在c/c++程序会经历,预处理,编译,汇编,链接这几个过程。

在c++程序链接的链接,符号表的生成和重定位会用修饰后的函数名去找。而C语言呢只会直接用函数名去找对应的函数

这是Linux系统,C语言和C++在对应编译器下生成的函数修饰名。

C语言:

C++:

可见C++的符号表在函数名后还加上了对应的参数

引用:

概念:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。

int main()
{
	int a = 10;
	int& b = a;    //引用的写法,只能说b是a的别名。
    b=20           //我们直接修改b也会修改a。
	cout << a;
	return 0;
}

对于为什么只能说b是a的别名?来举个栗子:张三有个外号叫小三,我们只能说小三是张三的外号,不能说张三是小三的外号。

权限放大:

引用也会涉及权限放大

比如:

这就是一个典型的权限放大,因为a是一个常量不能修改。b是一个变量是可以被修改的,这样写就会报错。

而不同的的类型也不能使用:

这样写也会报错。

 引用的应用:

我们在开始学函数的时候,相信总是被,传值调用和传址调用困扰,什么是形参是实参的临时拷贝,到底要传什么?搞得头大。

我们直接来看这个:

void Func(int& b)//取别名
{
	b = 20;
}

int main()
{
	int a = 10;
	Func(a);
	cout << a << endl;
	return 0;
}

我们只需要取一下别名,修改b,a也会直接被修改。

非常的好用!

标签:cout,int,c++,C++,含数,引用,重载,函数
From: https://blog.csdn.net/zgwnb666/article/details/137123157

相关文章

  • Python机器学习从入门到高级:导入数据(包含数据库连接)
    python数据科学系列https://developer.aliyun.com/article/1174199 ......
  • C++17 一些新特性的简单描述
    其实很多17的官方新特性早就被很多非官方的库支持,反复验证完善后被官方收录。1、std::optionalstd::optional<vector<int>>list={}/std::nullopt/{{}};不就是表示一个值存在与否是可选的吗注意下{{}}和nullopt的区别,笔者偶尔遇见过相关bug,毕竟通信行业,信息内容中空列表......
  • C++ 字符串完全指南:学习基础知识到掌握高级应用技巧
    C++字符串字符串用于存储文本。一个字符串变量包含由双引号括起来的一组字符:示例创建一个string类型的变量并为其赋值:stringgreeting="Hello";C++字符串连接字符串连接可以使用+运算符来实现,生成一个新的字符串。示例:stringfirstName="John";stringlastN......
  • 安装 Visual C++ 可再发行组件包的简单方法
    安装VisualC++RedistributablePackages的最佳方法安装对Wampserver(以及许多其他软件)至关重要的VC++可再发行组件的最简单、最简单、最不容易出错、最快的方法是使用一个程序,该程序通过单个可执行文件安装所需的所有内容。不,这不是乌托邦!它存在,它是名为VisualCppRedistA......
  • 设计算法判断一棵树是否为完全二叉树--c++
    【题目要求】设计算法判断一棵树是否为完全二叉树。【提示】根据完全二叉树的定义可知:1)如果一个结点有右孩子而没有左孩子,那么这棵树一定不是完全二叉树。2)如果一个结点有左孩子,而没有右孩子,那么按照层序遍历的结果,这个结点之后的所有结点都是叶子结点,这棵树才是完全二叉......
  • 关于C++的跨平台性
    0前言C++作为一种编译型语言,我们常常认为他是不能跨平台的。但是实际上c++就是为了跨平台而设计的。1大人,时代变了C/C++就是为了跨平台而设计的,那个时代的跨平台指的是:一次编写,到处编译。源代码写好了,我放到哪个平台都可以编译出可执行程序。因为早期各个系统都有各自的编......
  • 操作符重载(operator overloading)
    操作符重载(operatoroverloading)成员函数所有的成员函数一定带着一个隐藏的参数示例代码:inlinecomplex&complex::operator+=(constcomplex&r){//调用者就是this,这是一个指针.+=符号作用在左边的数,左边的数就是this.->编译器自动会传入c2的指针//this......
  • C++重载操作符
    在C++中,重载操作符<和重载函数调用操作符()各自适用于不同的情况,它们的使用取决于你的具体需求。比较<和()重载操作符<排序和比较:当你需要定义一个类或结构体的对象如何进行排序或比较时,你会重载操作符<。这在使用标准库中的排序函数(如std::sort)、集合(如std::set......
  • C/C++ 语言中的 ​if...else if...else 语句
    C/C++语言中的​if...elseif...else语句1.`if`statement2.`if...else`statement3.`if...elseif...else`statementReferences1.ifstatementThesyntaxoftheifstatementis:if(condition){//bodyofifstatement}Thecodeins......
  • 19、C++的指针基础
    1、指针的基本概念(1)变量的地址变量是内存变量的简称,在C++中,每定义一个变量,系统就会给变量分配一块内存,内存是有地址的。C++用运算符&获取变量在内存中的起始地址。语法:&变量名(2)指针变量指针变量简称指针,它是一种特殊的变量,专用于存放变量在内存中的起始地址。语法:数据......