C++异常捕获和动态内存申请

C++的异常处理机制使用try、catch和throw进行异常捕获和抛出,可以自定义异常类。在内存管理方面,栈内存由系统自动分配和释放,而动态内存(堆内存)则通过new和delete操作符进行管理,与C语言中的malloc()和free()函数不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. C++提供了异常捕获类exception,我们可以用这类里面try,catch和through来捕获和抛出异常,也可以继承该类,自己定义异常。
    语法为:
#include "stdio.h"
#include"iostream"
//异常处理类
#include"exception"
using namespace std;
int fun(int a, int b);
double division(int a, int b);

int main() {
    int a;
    int b;
    cout << "please input a and b:" << endl;
    cin >> a;
    cin >> b;
    fun(a, b);

    try
    {
        return a / b;
    }
    catch (const std::exception&)
    {
        cout << "b is 0????" << endl;
    }


    int x = 50;
    int y = 0;
    double z = 0;

    try {
        z = division(x, y);
        cout << z << endl;
    }
    catch (const char* msg) {
        cerr << msg << endl;
    }


    return 0;
}

int fun(int a, int b)
{
    if (b == 0)
//      throw "b cannot be zero!!!" ;//抛出异常
        cout << "b cannot be zero!" << endl;
    return 0;
}

double division(int a, int b)
{
    if (b == 0)
    {
        throw "Division by zero condition!";
    }
    return (a / b);
}
  1. 关于动态内存的申请
    栈:日常c++申请的变量都将占用栈内存,这个都是直接由系统来分配和释放内存;
    堆:有的时候不知道需要分配多大内存给变量或者数组,即在程序运行时候才知道,这时候就可以动态的分配内存。
    关键词:new,delete,这两个是操作符。而c语言是通过函数来申请和释放内存的,即malloc()和free().
    基本语法:
//为指针变量申请内存
double *p= NULL;
p=new double;
*p=100.2234;//在内存空间赋值
delete p;//删除内存

//为数组分配内存
char *p=NULL;
p=new char[10];//申请10个char类型空间地址
//删除空间
delete [] p;

//为二重数组赋值
char **p=NULL;
p=new char[3][4]//申请3*4空间
delete []p;

为对象分配内存

#include "stdio.h"
#include"iostream"
using namespace std;

//定义一个类
class student
{
public:
    char name;
    char age;
    float whole_score(int chinese,int math, int english)
    {
        return chinese + math + english;
    }
//定义一个构造函数
    student()
    {
        cout << "构造函数!" << endl;
    }

//定义一个析构函数
    ~student() 
    {
        cout << "这个是析构函数!" << endl;
    }

private:
    int family;
protected:
    int chinese = 100;
    int math = 20;
    int english = 120;
};


int main()
{
    //申请一个对象
    //student s=new student[4]错误,指针可以指向数组第一个元素地址
    student * S = new student[4];
    delete[] S;
    return 0;
}

输出:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值