C++引用

文章目录

  • C++关键字
  • C++命名空间
  • C++缺省参数
  • C++函数重载
  • C++引用
    • C++引用与指针
    • C++引用作为函数参数
    • C++引用作为函数返回值

C++关键字

C++是对C语言的扩充,C++中有63个关键字,C语言有32个关键字

C++关键字包含了C语言的关键字:
C++引用_第1张图片

C++命名空间

为什么使用命名空间?

一个中大型项目往往由多名程序员共同开发,会使用大量的变量和函数…,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突。

因此C++引入了**命名空间(Namespace)**的概念:

// name是命名空间的名字,它里面可以包含变量、函数、类、typedef、#define
namespace name
{
    //variables
    //functions
    //classes
    //typedef
    //#define
}

例如:

#include 
// using声明整个命名空间
using namespace std;
int main()
{
    cout<<"hello world"<< endl;
    return 0;
}



#include 
// using声明命名空间中的部分函数或者变量或者类....
using std::cout;
using std::endl;
int main()
{
    cout << "hello world" << endl;
    return 0;
}

C++缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实
参则采用该形参的缺省值,否则使用指定的实参

void Func(int a = 0)
{
	cout<

缺省参数又分为全缺省参数和半缺省参数

// 全缺省参数
void Func(int a = 10, int b = 20, int c = 30)
{
	cout<<"a = "<void swap1(int *a, int *b);      //交换 int 变量的值
void swap2(float *a, float *b);  //交换 float 变量的值
void swap3(char *a, char *b);    //交换 char 变量的值
void swap4(bool *a, bool *b);    //交换 bool 变量的值

函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这
些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型
不同的问题。

#include
using namespace std;
// 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++引用

引用(Reference)是 C++ 相对于C语言的又一个扩充。引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。引用类似于人的绰号,使用绰号和本名都能表示一个人。

type &name = data;

type 是被引用的数据的类型,name 是引用的名称,data 是被引用的数据。引用必须在定义的同时初始化。

#include 
using namespace std;

int main()
{
    // c++引用
    int a = 10;
    int& b = a;
    int& c = b;
    cout<< a <<" "<< &a << endl;
    a++;
    cout<< b <<" "<< &b << endl;
    cout<< c <<" "<< &c << endl;


    return 0;
}

C++引用_第2张图片


C++引用与指针

  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。(引用不能替代指针的原因)
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。(引用不能替代指针的原因)

例如在如下场景中我们只能使用指针来完成删除节点后的链接:


C++引用_第3张图片


引用:

  1. 引用作输出型参数(实参和形参绑定在一起,从而拥有“在函数内部影响函数外部数据”的效果,还能减少拷贝提高效率)
  2. 引用作返回值

C++引用作为函数参数

#include 
using namespace std;

void swap1(int a, int b);
void swap2(int *p1, int *p2);
void swap3(int &r1, int &r2);
// 直接传递参数内容
void swap1(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
}

// 传递指针
void swap2(int *p1, int *p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

// 按引用传参
void swap3(int &r1, int &r2)
{
    int temp = r1;
    r1 = r2;
    r2 = temp;
}


C++引用作为函数返回值

#include 
using namespace std;

int &plus10(int &r) {
    r += 10;
    return r;
}

int main() {
    int num1 = 10;
    int num2 = plus10(num1);
    cout << num1 << " " << num2 << endl;

    return 0;
}

**在将引用作为函数返回值时应该注意:**不能返回局部数据(例如局部变量、局部对象、局部数组等)的引用,因为当函数调用完成后局部数据就会被销毁,有可能在下次使用时数据就不存在了。

你可能感兴趣的:(C++学习专栏,c++,开发语言)