C++与C的区别(3)

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;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值