2025年C++远征之离港篇

C++远征之离港篇Hello 大家好 今天下午学习的是 c 的离港篇 这一篇的内容有点多 望大家耐心看完 相信你一定会有收获的 那我们就学起来吧 在这一篇的主要知识点主要有 1 c 的引用 2 c 的 const 关键字 3 c 函数的新特性

大家好,我是讯享网,很高兴认识大家。

Hello~大家好,今天下午学习的是c++的离港篇,这一篇的内容有点多,望大家耐心看完,相信你一定会有收获的,那我们就学起来吧

在这一篇的主要知识点主要有:
1.c++的引用
2.c++的const关键字
3.c++函数的新特性(函数参数认值、函数重载、内联函数)
4.内存管理

1. c++语言的引用

引用在C++中可以理解为变量的别名(就像我们起的小名),但是也不能只有别名,而没有真实的姓名;下面通过四个方面来讲解引用这个知识点:

1.1基本数据类型的引用
我们设初始值为3,给a的取别名是b,我们给b赋值10 输出a=10 ,具体程序如下所示:

 #include <iostream> #include <stdlib.h> using namespace std; int main() { int a = 3; int &b = a; //定义b是a的别名,&b是要初始化 b = 10; cout << a << endl; return 0; } 

讯享网

1.2.结构体类型引用
首先定义结构体,具体的程序步骤如下所示:

讯享网 #include <iostream> #include <stdlib.h> using namespace std; typedef struct //定义结构体 { int x; int y; }coor; //coor是结构体名 int main() { coor c1; //定义结构体变量 c1 coor &c = c1; //给c1起了一个别名c c.x = 10; //用别名对C1进行操作 c.y = 20; cout << c1.x << ","<< c1.y; return 0; } 

1.3.指针类型的引用
指针类型的语句: 类型 *&指针引用名(别名)=指针;
具体的程序如下:

 1#include <iostream> 2#include <stdlib.h> 3using namespace std; 4 5int main() 6{ 7 int a = 10; //定义一个整形变量10 8 int *p = &a ; //定义一个指针变量P指向a地址 9 int *&q = p ; //指针引用,给p起一个别名q 10 *q = 20; 11 cout << a << endl; 12 return 0; 13} 

1.4.引用作为函数参数需要注意什么呢?
我们知道在C语言中,没有使用引用完成两个数的交换程序如下:

讯享网 void fun (int *a, int *b) //定义函数 { int c = 0; c = *a ; *a = *b; *b= c; } int x = 10, y = 20; //调用时 fun(&x , &y); 

在c++中使用引用后:

void fun (int &a, int &b) //定义函数 { int c = 0; c = a ; a = b; b= c; } int x = 10, y = 20; //调用时 fun(x,y); 

对比发现,这样的情况下,c++简单很多。

2.c++的const关键字

const是用来控制变量是否可以变化的,其重要的语法有以下几个方面:
1.const与基本数据类型
2.const与指针类型
3.const与引用

2.1.const与基本的数据类型
下面两句代码是有const和没有const的区别,我们可以知道加了const,变量变成了常量。

讯享网int x= 3 //x是变量 const int x = 3 ; //x是常量 

加了const以后,如果再给x赋值,系统就会提示错误。

2.2.const与指针类型
添加一处const的程序如下:

const int*p = null ; //等价第二行 const修饰的是*p int const *p = null ; //与第一行等价 const也修饰*p int *const p = null ; //与前两个不同,const修饰的是p 

当然也可以添加两处const:

讯享网const int *const p = &x ; //等价第二行 int const *const p = &x ; //与第一行等价 

这种情况下,p就不能修改X的值,也不能将*p指针指向别的变量了

2.3.const与引用

int x = 3; const int &y = 10 ; x=10 ; //正确的,x是变量 y=20 ; //错误的,y是常量 

2.4.const示例

下面通过7个示例的正确来加深对const的理解:上面6个都是错误例子,最后一个是正确的例子,你能看出来哪里错误的吗,如果可以那么你就对const这个理解了。


讯享网

讯享网 const int x=3; x=5; //错误 int x = 3 ; const int y = x; y = 5; //错误 int x = 3; const int *y = &x ; *y= 5; // 错误 int x = 3, z = 4; int *const y = &x; y = &z; //错误 const int x = 3; const int &y = x; y = 5; // 错误 const int x= 3; int *y = &x ; //错误 int x= 3; const int *y= &x; //正确 

03 c++函数的新特性

c++函数的新特性在这里主要说三点:
1.函数参数默认值
2.函数重载
3.内联函数
下面就让我们来一一介绍它们吧~

3.1.函数参数默认值
在C++中,如果我们要是定义一个函数,函数是可以有默认值的,但是默认值也是有规则的:有默认参数值的参数必须在参数表的最右端,下面两行代码所示,我们要从右往左给变量默认值,不能只给中间参数默认值,而不给后面参数默认值。

void fun(int i , int j= 10 , int k = 20); //是对的 void fun(int i , int j= 10 , int k ); //是错的 

下面在讲一个默认值使用的注意事项:
我们在声明函数的时候可以写上默认值,在定义的时候不建议加上默认值(因为有时会报错)。
在没有实参的时候就使用默认值,在有实参的时候用实参覆盖默认值
如下代码所示:

讯享网#include <iostream> #include <stdlib.h> using namespace std; void fun(int i = 20, int j = 20, int k = 10); //声明的时候加上默认值 int main() { fun(); //没有实参则用默认值 fun(100); //有实参的则用实参代替第一个默认值 fun(100,200); //实参代替两个默认值 fun(100,200,300); //全部由实参来代替默认值 system("pause"); return 0; } void fun(int i , int j , int k) //定义不需要加默认值 { cout<< i << "," << j <<","<<k << endl; } 输出的结果 20,20,10 100,20,10 100,200,10 100,200,300 

3.2.函数重载

在相同的作用域下,满足:
1同一个函数名;2参数个数和类型不同;
这种情况下我们可以说这几个函数符合函数重载;

void fun(int i = 20, int j = 20, int k = 10); void fun(double i , double j); 

如上程序所示,函数名都是fun ,上面的函数fun定义三个整形参数,下面的函数fun定义两个double型参数,因此符合函数重载,具体的调用是由系统自动识别函数参数类型来的。

那么我们想一想重载能够给我们带来什么好处呢?

当我们需要去求:一个结构体数组的最大值、三个数的最大值,五个数的最大值的时候,我们就不需要去想名字,直接用同样的名字就行,调用的时候,计算机就会给我们识别,提高了效率。

下面代码是函数重载的例子:

讯享网#include <iostream> #include <stdlib.h> using namespace std; void fun(int i = 20, int j = 20, int k = 10); //函数重载 void fun(double i , double j); //函数重载 int main (void) { fun(1.1,2.2); //因为1.1 2.2 是double类型,所以计算机调用的是下面的fun fun(1,2); //实际上调用的上面的fun函数 system("pause"); return 0; } void fun(int i , int j , int k) { cout<< i << "," << j <<","<<k << endl; } void fun(double i , double j) { cout<< i << "," << j << endl; } 

2.3.内联函数

inline void fun(int i = 20, int j = 20, int k = 10); 

当然内联函数也有不足:
1.内联编辑是建议性的,由编译器决定;
2.内联函数要求逻辑简单,不含for while 循环,使用频繁的函数可以用内联函数;
3.递归函数不能使用内联函数;

4 内存管理

内存的本质是一种资源,在计算机中是由操作系统掌控的,在c++中,内存的管理主要指的是申请与释放。
申请内存使用:new
释放内存使用:delete

讯享网 1int main (void) 2{ 3 int *p = new int; //申请p内存 4 if (NULL == p ) // 判断申请是否成功 5 { 6 system("pause"); 7 return 0; 8 } 9 *p = 20; 10 cout << *p<< endl ; 11 delete p ; //释放P内存 12 p= NULL; 13 system("pause"); 14 return 0; 15} 

注意:
1.new和delete需要一起使用,不可混搭。
2.申请内存需要判断是否成功,释放内存需要设计空指针。

练习题

 //使用const关键字定义整型变量count。并定义指针P引用变量count, //利用for循环打印count次Hello imooc #include <iostream> using namespace std; int main(void) { const int count =3 ; //const定义整形变量 const int *p = &count; //定义指针变量P for (int i = 0; i< *p ; i++) { cout << "hello imooc" << endl; } return 0; } 

2.在堆中申请100个char类型的内存,拷贝hello imooc字符串分配的堆中的内存中,打印字符串,最后释放内存。

讯享网 #include <iostream> #include <string.h> using namespace std; int main () { char *str = new char [100]; // 在堆中申请100个char类型的内存 strcpy(str ,"hello c++"); // 拷贝字符串到分配的堆中内存中 cout << str << endl; //打印字符串 delete []str; //释放内存 str = NULL; return 0; } 

今天就学习这些,see you tomorrow~

小讯
上一篇 2025-03-24 15:54
下一篇 2025-03-03 17:10

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/28758.html