即使走的再远,也勿忘启程时的初心
C/C++ 游戏开发
Hello,米娜桑们,这里是君兮_,我之前看过一套书叫做《明朝那些事儿》,把本来枯燥的历史讲的生动有趣。而C++作为一门接近底层的语言,无疑是抽象且难度颇深的。我希望能努力把抽象繁多的知识讲的生动又通俗易懂,因此,咱们这个讲解C++的系列博客就叫做《C++那些事儿》啦,而今天我们要讲的内容是C++中的函数重载与引用
一天,你的舍友有节课没去上课,但是碰巧老师上课点名点到他了,老师就问你:他来了吗?
你回答说:如来
老师又问你:到底来没来?
你回答说:如来
于是老师就把你请出教室了
#include
using namespace std;
// 1、参数类型不同
int Add(int x, int y)
{
cout << "int类型的Add" <<" "<< x + y << endl;
return x + y;
}
double Add(double x, double y)
{
cout << "double类型的Add" << " " << x + y << endl;
return x + y;
}
// 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;
}
int main()
{
int x = 0;
int y = 0;
Add(1, 5);
f();
f(10);
f(10, 'b');
f('a', 10);
return 0;
}
最终结论(在目前学习阶段记住这个结论就行)
1.C语言之所以没办法支持重载,是因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。
2. 如果两个函数函数名和参数是一样的,返回值不同是不构成重载的,因为调用时编译器没办法区分。
void Test()
{
int a = 10;
int& ra = a;//<====定义引用类型
printf("%p\n", &a);
printf("%p\n", &ra);
}
int main()
{
Test();
}
引用与原变量指向同一块空间
注意:引用类型必须和引用实体是同种类型的
void Test()
{
int a = 10;
int& ra = a;//<====定义引用类型
int& b = a;//一个变量可以有多个别名
printf("%p\n", &a);
printf("%p\n", &ra);
printf("%p\n", &b);
}
void TestConstRef()
{
const int a = 10;
//int& ra = a; // 该语句编译时会出错,a为常量
const int& ra = a;
}
void TestConstRef()
{
// int& b = 10; // 该语句编译时会出错,b为常量
const int& b = 10;
double d = 12.34;
//int& rd = d; // 该语句编译时会出错,类型不同
const int& rd = d;
}
void TestConstRef()
{
double d = 12.34;
//int& rd = d; // 该语句编译时会出错,类型不同
const int& rd = d;
}
void Swap(int& left, int& right)
{
int temp = left;
left = right;
right = temp;
}
int& Count()
{
static int n = 0;
n++;
// ...
return n;
}
注意:如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用引用返回,如果已经还给系统了,则必须使用传值返回。
int& Add(int a, int b)
{
int c = a + b;
return c;
}
int main()
{
int& ret = Add(1, 2);
Add(3, 4);
cout << "Add(1, 2) is :"<< ret <<endl;
return 0;
}
int& Add(int a, int b)
{
static int c = a + b;
return c;
}
int main()
{
int& ret = Add(1, 2);
Add(3, 4);
cout << "Add(1, 2) is :" << ret << endl;
return 0;
}
int main()
{
//int& ret = Add(1, 2);
char c = 'a';
char& rc = c;
char* rrc = &c;
cout << "&rc"<<" "<< sizeof(c) << endl;
cout << "rrc" <<" "<< sizeof(rrc) << endl;
return 0;
}
引用与指针的其他区别点
1. 引用概念上定义一个变量的别名,指针存储一个变量地址。
2. 引用在定义时必须初始化,指针没有要求
3. 引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何
一个同类型实体
4. 没有NULL引用,但有NULL指针
5. 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32
位平台下占4个字节)
6. 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
7. 有多级指针,但是没有多级引用
8. 访问实体方式不同,指针需要显式解引用,引用编译器自己处理
9. 引用比指针使用起来相对更安全
好啦,我们今天的内容就先到这里啦!今天讲解了函数重载与引用使用方法以及有关它们使用的细节和注意事项,这两块的知识点会一直伴随你C++学习之路,是非常重要的,因此希望大家把有关的重点和难点多看几遍加深理解。
有任何的问题和对文章内容的疑惑欢迎在评论区中提出,当然也可以私信我,我会在第一时间回复的!!
新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下再走呗。你们的支持就是我更新的动力!!!
**(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)**