如今,好比我想写一个具备求和功能的函数。若是是想求整数的和,那么我就得这么写,
安全
int add ( int a, int b ){ cout << " int + int " << endl; return 1; }
这个函数能够求两个整数的和。那若是我想求三个整数的和,很明显我就得重写一个函数。若是是在C中,我想要再重写一个求和函数,函数名必然不能跟以前的函数名相同,不然会引发函数名相同的错误。为了解决这样一个问题,C++中引入了函数名重载这样的一个概念。什么是重载呢?函数名相同,函数的参数列表不一样,(参数列表包括,参数的个数,参数的类型,参数的顺序)叫作函数的重载。好比,
ide
参数个数不一样函数
int add ( int a, int b ){ cout << " int + int " << endl; return 1; } int add ( int a, int b, int c ){ cout << "int + int + int " << endl; return 1; }
参数类型不一样指针
int add ( int a, int b ){ cout << "int + int " << endl; return 1; } int add ( int a, double b ){ cout << "int + double " << endl; return 1; }
参数的顺序不一样内存
int add ( int a, double b ){ cout << "int + double " << endl; return 1; } int add ( double b, int a ){ cout << "double + int " << endl; return 1; }
那么可否根据函数的返回值类型来区分重载函数呢?答案是否认的。若是两个函数,函数名相同,参数列表相同,那么编译器就会不知道该去匹配哪个函数,这样以来一定会形成分歧,因此,函数的返回值类型固然是不能区分重载函数的。编译器
指针。由于C语言中有指针,因此在C++中仍然保留了指针。好比,
it
int a = 1; int* p = &a; cout << "a = " << *p << endl;
因为指针容易引发误用,用很差会带来一系列的程序安全隐患的问题,因此,C++中用引入了“引用”来取代指针。如何定义一个引用,
编译
int& p;
引用比指针安全的其中一个因素就是,引用必须初始化,这个指针不一样,指针定义以后能够不用初始化,这就致使了容易形成内存泄露。因此,对引用的使用,class
int a = 1; int& b = a;
这样以来,b就为a的一个别名。对b的操做,起始就是对a的操做。
引用