C++编程进阶
创始人
2024-02-08 11:13:24
0

目录

new运算符

new关键字的使用案例

C++的引用

C++中引用案例 

引用的注意事项

引用做函数参数

引用做函数的返回值

前言:

具体案例

引用的本质

常量引用

常量引用原理

经典案例

函数的提高

函数的默认参数

注意:

具体案例

函数的占位参数

具体案例

函数的重载

函数重载满足的条件

函数重载的注意事项

引用作为重载的条件

函数重载碰到函数默认参数

new运算符

前言:C++中利用new操作符程序员可以在堆区手动开辟数据空间;程序员也可以手动释放空间,释放空间利用操作符delete

开辟空间语法:new 数据类型

返回值:该数据对应类型的指针

释放空间语法:delete 要释放的地址;

开辟数组语法:new 数据类型[数组长度]

返回值:对应开辟出数组空间的首地址(指针)

释放数组空间语法:delete[] 要释放的地址;

new关键字的使用案例

#include 
using namespace std;
int* func() {//在堆区创建空间int* p = new int(10);return p;
}
void testArr() {//在堆中创建长度为10的整形数组int* arr = new int[10];for (int i = 0; i < 10; i++) {//给10个元素赋值arr[i] = i + 100;}for (int i = 0; i < 10; i++) {cout << arr[i] << endl;}//释放数组空间地址delete[] arr;
}
void main() {testArr();int* p = func();cout << "a的值为:" << *p << endl;cout << "a的值为:" << *p << endl;//堆内释放地址delete p;//内存已经被释放,再次访问就是非法操作cout << "a的值为:" << *p << endl;
}

C++的引用

作用:给变量起别名

语法:数据类型 &别名=原名

C++中引用案例 

#include 
using namespace std;
void main() {//引用的基本语法int a = 10;int &b = a;b = 20;cout << "a的值为:" << a << endl;//20cout << "b的值为:" << b << endl;//20system("pause");
}

引用的注意事项

  • 引用必须要初始化(必须要告诉引用的是谁,如:int &b;是不正确的)
  • 引用一旦初始化后就不可以更改

理解:变量名本身就是自己所表示的值的一块内存空间,值的地址表示变量,因此,值与别名在某种意义上是等价的,所以引用必须要初始化,并且初始化后便不可更改

引用做函数参数

作用:函数传参时可以利用引用的技术让形参修饰实参

#include 
using namespace std;
void swap(int &a,int &b) {int temp = a;a = b;b = temp;
}
void main() {int a = 10;int b = 20;swap(a, b);cout << "a的值为:" << a << "\tb的值为:" << b << endl;system("pause");
}

结果:由此观之,引用传递,那么形参的改变会影响实参

引用做函数的返回值

前言:

  • 引用是可以作为函数返回值存在的
  • 不要返回局部变量的引用
  • 引用的返回值类型:数据类型&
  • 返回值为引用类型的函数那么其调用可以作为左值

具体案例

#include 
using namespace std;
//以引用的形式返回a
int& change() {//全局区的变量astatic int a = 10;return a;
}
void main() {int &ref = change();//10cout << "ref的值为:" << ref << endl;cout << "ref的值为:" << ref << endl;system("pause");
}
#include 
using namespace std;
//以引用的形式返回a
int& change() {//全局区的变量astatic int a = 10;return a;
}
void main() {int &ref = change();//相当于将a的引用赋值为1000change() = 1000;//因为ref为a的引用所以也为1000cout << "ref的值为:" << ref << endl;system("pause");
}

结论:若函数返回值类型为引用类型,则其函数调用可以作为左值

引用的本质

本质:在C++内部实现是一个指针常量

结论:C++推荐使用引用技术,因为语法方便,引用的本质是指针常量,但是所有的指针操作编译器都帮助我们做了

常量引用

作用:常量引用主要用来修饰形参,防止误操作

常量引用原理

#include 
using namespace std;
void main() {//加上const后,编译器将代码改为:int temp=10; int& ref=temp;const int& ref = 10;//下面报错,加了const后引用的值不可更改//ref = 20;cout << "ref的值为:" << ref << endl;system("pause");
}

注意:加了const后,那么被引用的别名值不可被更改 

经典案例

#include 
using namespace std;
void showValue(const int& a) {//这里形参到的改变会影响实参,因此加const来防止误操作cout << "a的值为:" << a << endl;
}
void main() {int a = 100;showValue(a);system("pause");
}

函数的提高

函数的默认参数

前言:在C++中函数的形参列表中的形参是可以有默认值的

语法:
返回值类型 函数名(参数=默认值){函数体;
}

注意:

  • 若某个位置已经有了默认值,那么从这个位置往后,从左到右都必须有默认值
  • 若函数的声明有默认参数,那么函数的实现就不能有默认参数(函数的声明和函数的实现只能有1个有默认参数)
  • 调用函数传递的实参从左到右依次与形参一一匹配,其中传入的参数会覆盖掉对应位置的默认值

具体案例

#include 
using namespace std;
int add(int a, int b=20, int c=30) {return a+b+c;
}
void main() {int sum=add(10);cout << "sum等于:" << sum << endl;//60system("pause");
}

函数的占位参数

C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置

语法:
返回值类型 函数名(数据类型){函数体;
}

注意:占位参数也可以有默认值 

具体案例

#include 
using namespace std;
//占位参数
void func(int a,int) {cout << "占位参数实例!" << endl;
}
void main() {//占位参数函数的调用func(10, 20);system("pause");
}
#include 
using namespace std;
//占位参数的默认参数
void func(int a,int =10) {cout << "占位参数实例!" << endl;
}
void main() {//占位参数函数的调用func(10);system("pause");
}

函数的重载

含义:函数名相同,但参数列表不同,进而提高函数的复用性

函数重载满足的条件

  • 同一个作用域下
  • 函数名称相同
  • 函数参数类型不同或者参数个数不同,或者参数顺序不同

注意:函数的返回值不可以作为函数重载的条件的

#include 
using namespace std;
void func() {cout << "func的调用:" << endl;
}
void func(int a) {cout << "func(int a)的调用:"<

函数重载的注意事项

引用作为重载的条件

#include 
using namespace std;
void func(int &a) {cout << "func(int &a)的调用:" << endl;
}
void func(const int &a) {cout << "func(const int &a)的调用:"<

函数重载碰到函数默认参数

#include 
using namespace std;
void func(int a,int b=10) {cout << "func(int a,int b=10)的调用:" << endl;
}
void func(int a) {cout << "func(int a)的调用:"<< endl;
}
void main() {int a = 10;//若传一个参数的话会出现二义性func(10,20);system("pause");
}

注意:当函数重载碰到默认参数时,会出现二义性,报错,应尽量避免这种情况

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...