目录
函数重载:
函数重载概念:
参数类型不同:
#include <iostream>
using namespace std;
void Node(int a ,char b)
{
cout << "Node(a, b)" << endl;
}
void Node(int a ,int b )
{
cout << "Node(a,b)" << endl;
}
参数个数不同:
#include <iostream>
using namespace std;
void Node(int a ,int b)
{
cout << "Node(a, b)" << endl;
}
void Node(int a ,int b ,int c)
{
cout << "Node(a,b)" << endl;
}
参数类型顺序不同:
#include <iostream>
using namespace std;
void Node(int a ,char b)
{
cout << "Node(a, b)" << endl;
}
void Node(char a ,int b )
{
cout << "Node(a,b)" << endl;
}
C++支持函数重载的原理--名字修饰:
在C/C++中,一个程序要运行起来,需要经历以下几个阶段:预处理、编译、汇编、链接
引用:
引用概念:
引用特性:
void Node()
{
int a = 10;
int& a1 = a;
int& a11 = a;
int& a111 = a1;
printf("%p\n%p\n%p\n%p\n", &a, &a1,&a11,&a111);
}
常引用:
引用权限不能放大:
void TestConstRef()
{
const int a = 10;
//int& ra = a; // 该语句编译时会出错,a为常量
const int& ra = a;
// int& b = 10; // 该语句编译时会出错,b为常量
const int& b = 10;
double d = 12.34;
//int& rd = d; // 该语句编译时会出错,类型不同
const int& rd = d;
}
使用场景:
做参数:
void swap(int &a,int &b)
{
int tmp = a;
a = b;
b = tmp;
}
做返回值:
传值、传引用效率比较:
#include <iostream>
#include <time.h>
using namespace std;
struct A { int a[10000]; };
void TestFunc1(A a) {}
void TestFunc2(A& a) {}
void TestRefAndValue()
{
A a;
// 以值作为函数参数
size_t begin1 = clock();
for (size_t i = 0; i < 10000; ++i)
TestFunc1(a);
size_t end1 = clock();
// 以引用作为函数参数
size_t begin2 = clock();
for (size_t i = 0; i < 10000; ++i)
TestFunc2(a);
size_t end2 = clock();
// 分别计算两个函数运行结束后的时间
cout << "TestFunc1(A)-time:" << end1 - begin1 << endl;
cout << "TestFunc1(A&)-time:" << end2 - begin2 << endl;
}
int main()
{
TestRefAndValue();
return 0;
}
二者在运行效率上相差很大
引用和指针的区别:
语法:
底层:
int main()
{
int a = 10;
int& ra = a;
int* pa = &a;
return 0;
}
通过反汇编代码可知,二者在底层是没区别的
内联函数:
- C和Cpp对于频繁调用的小函数的处理方式:
//C->宏定义
#define ADD(a, b) ((a) + (b))
//Cpp->内联函数
#include <iostream>
using namespace std;
inline int Add(int x,int y)
{
return x+y;
}
int main()
{
int ret = 0;
ret = Add(1,2);
cout << ret << endl;
return 0;
}