C++语言基础 例程 异常处理的方法

简介: 贺老师的教学链接  本课讲解例:防止除数为0#include <iostream>using namespace std;template <typename T>T Div(T x,T y){ if(y==0) throw y;//抛出异常 return x/y;}int main(){ int x=5,y

贺老师的教学链接  本课讲解


例:防止除数为0

#include <iostream>
using namespace std;
template <typename T>
T Div(T x,T y)
{
    if(y==0)
        throw y;//抛出异常
    return x/y;
}


int main()
{
    int x=5,y=0;
    double x1=5.5,y1=0.0;
    try
    {
        //被检查的语句
        cout<<x<<"/"<<y<<"="<<Div(x,y)<<endl;
        cout<<x1<<"/"<<y1<<"="<<Div(x1,y1)<<endl;
    }
    catch(int)//异常类型
    {
        cout<<"除数为0,计算错误!"<<endl;//异常处理语句
    }
    catch(double)//异常类型
    {
        cout<<"除数为0.0,计算错误!"<<endl;//异常处理语句
    }
    return 0;
}


异常处理再例:求三角形周长
#include <iostream>
#include <stdexcept>
using namespace std;
int triangle(int a, int b, int c)
{
    if(a<0 || b<0 || c<0 || a+b<=c || a+c<=b || b+c<=a)
        throw runtime_error("The lengths of three sides can't form triangle");
    return a + b + c;
}


int main()
{
    int total = 0;
    try
    {
        total = triangle(3,4,7);
    }
    catch(const runtime_error& e)
    {
        cout<<e.what()<<endl;
    }
    cout<<total<<endl;
    return 0;
}


在异常处理中处理析构函数
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
    Student(int n,string nam):num(n), name(nam)
    {
        cout<<"constructor-"<<n<<endl;
    }
    ~Student( )
    {
        cout<<"destructor-"<<num<<endl;
    }
    void get_data( );
private:
    int num;
    string name;
};
void Student::get_data( )
{
    if(num==0)
        throw num; //如num=0,抛出int型变量num
    else
        cout<<num<<" "<<name<<endl;
    cout<<num<<" is in get_data()!"<<endl;
}


void fun( )
{
    Student stud1(1101,"Tan");
    stud1.get_data( );
    Student stud2(0,"Li");
    stud2.get_data( );
}


int main( )
{
    try
    {
        fun( );
    }
    catch(int n)
    {
        cout<<"num="<<n<<",error!"<<endl;
    }
    return 0;
}


在函数嵌套的情况下检测异常处理
#include <iostream>
using namespace std;
int main( )
{
    void f1( );
    try
    {
        f1( );   //调用f1( )
    }
    catch(double)
    {
        cout<<"OK0!"<<endl;
    }
    cout<<"end0"<<endl;
    return 0;
}
void f1( )
{
    void f2( );
    try
    {
        f2( );   //调用f2( )
    }
    catch(char)
    {
        cout<<"OK1!";
    }
    cout<<"end1"<<endl;
}
void f2( )
{
    void f3( );
    try
    {
        f3( );   //调用f3( )
    }
    catch(int)
    {
        cout<<"Ok2!"<<endl;
    }
    cout<<"end2"<<endl;
}
void f3( )
{
    double a=0;
    try
    {
        throw a;   //抛出double类型异常信息
    }
    catch(float)
    {
        cout<<"OK3!"<<endl;
    }
    cout<<"end3"<<endl;
}


目录
相关文章
|
12天前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
248 2
|
2月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
66 4
|
3月前
|
存储 C++
C++语言中指针变量int和取值操作ptr详细说明。
总结起来,在 C++ 中正确理解和运用 int 类型地址及其相关取值、设定等操纵至关重要且基础性强:定义 int 类型 pointer 需加星号;初始化 pointer 需配合 & 取址;读写 pointer 执向之处需配合 * 解引用操纵进行。
245 12
|
8月前
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
202 15
|
8月前
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
144 8
|
8月前
|
C语言 C++ 开发者
【c++】异常处理
本文深入探讨了C++中的异常处理机制,从基础概念到实际应用进行全面解析。首先介绍了异常的作用及优势,相比C语言的错误码方式,C++通过抛出对象实现更全面的错误处理。接着分析了异常的使用方法,包括`try-catch`结构、异常传播与捕获规则,以及栈展开的过程。文章还讨论了异常安全问题,如内存泄漏和资源清理,并引出智能指针的解决方案。此外,介绍了C++11的`noexcept`规范和标准库异常体系,帮助开发者构建更健壮的应用程序。最后总结了异常的优点与潜在问题,为后续学习智能指针埋下伏笔。
174 15
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
270 5
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
120 0
|
存储 分布式计算 编译器
深入计算机语言之C++:C到C++的过度-2
深入计算机语言之C++:C到C++的过度-2
|
9月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。