1、引用作为返回值
声明:类型名& 函数名(形式参数表)
作用:(1)可以作为独立的函数调用语句 (2)可以作为表达式中的某一个运算对象使用 (3)可以作为左值使用(即将函数的调用放在赋值号左边,当做变量使用)
#include<cstdio>
#include<iostream>
using namespace std;
int &Fun(const int &x,int &y,int z)
{
z++;
y=x+y+z;
return y;
}
int main()
{
int a=1,b=2,c=3,d=0;
cout<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;
Fun(a,b,c);///作为独立的函数调用语句使用,返回值被忽略
d=Fun(a,b,c);///相当于 int &Fun(....)=返回值 此时的函数名相当于返回值的引用(别名)
cout<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;
Fun(a,b,c)=20;///左值调用,相当于b=20
cout<<"a="<<a<<" b="<<b<<" c="<<c<<" d="<<d<<endl;\
return 0;
}
2、动态内存空间的管理
C语言:申请动态空间方式
#include<cstdio>
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int *p;///申请了一个int*类型的指针,p只能存放int类型元素的地址
p=(int *)malloc(sizeof(int));
p=(int *)malloc(10*sizeof(int));///申请连续10个int大小的内存空间实现动态一维数组
p=(int *)calloc(10,sizeof(int));///申请连续10个int大小的内存空间实现动态一维数组
}
C++:申请和释放动态内存空间的方式
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int *p;
p=new int;///申请1个int大小的内存空间,指针指向起始地址
delete p;///释放单个动态空间
p=new int[10];///利用new申请连续10个int大小的内存空间实现动态一维数组
delete []p;///释放动态一维数组空间
p=new int(10);///等效于两条语句:p=new int; *p=10
cout<<*p<<endl;
}
3、void 类型的指针
void作为指针的类型时,表示不确定的类型,因此void类型的指针成为一种通用型指针,即任何类型的指针均可以直接赋值给void类型的指针变量。 但是利用该指针处理所指向内存中的内容时,必须进行 显示类型转换。
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
void *vp;
char c='A';
short int x=97;
vp=&c;
cout<<*(char *)vp<<endl;///显示类型转换
vp=&x;
cout<<*(short int*)vp<<endl;
}
4、C++语言中的异常处理
定义:异常指的是不同(与常识,规律等不同),与错误不同,异常这种差错可以被定义、发现和处理。例如,某个月份是13月份,虽然运行程序时无错误,但可以认为这是一种异常,应予以处理。
处理:某函数检查出了异常,通常不在本函数中处理,而是通过throw抛出异常的机制,将异常传送给调用它的函数(称为上级函数);上级函数通过catch捕捉这个异常后进行处理。
步骤:(1)检查异常(使用try语句块)
(2)抛出异常(使用throw语句块)
(3)捕捉并处理异常(使用catch语句块)
#include<iostream>
using namespace std;
int divide(int x,int y)
{
if(y==0) throw y;///如果分母为0,抛出异常(实际上这是异常的一种具体类型的定义)
return x/y;
}
int main()
{
int a=10,b=5,c=0;
try ///检查是否出现异常(如果处理过程中出现 异常,会通过throw抛出,try就会检测得到)
{
cout<<"a/b="<<divide(a,b)<<endl;
cout<<"b/a="<<divide(b,a)<<endl;
cout<<"a/c="<<divide(a,c)<<endl;
cout<<"c/b="<<divide(c,b)<<endl;
}
catch(int)///捕捉并处理异常;注意:进行异常处理后,程序继续执行catch字句后面的语句
{
cout<<"except of divide of zero"<<endl;
}
cout<<"calculate finished"<<endl;
return 0;
}

被折叠的 条评论
为什么被折叠?



