程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2023-11-07
在C++程序中,任何需要检测异常的语句(包括函数调用)都必须在try语句块中执行,异常必须由紧跟着try语句后面的catch语句来捕获并处理。因而,try与catch总是结合使用。throw、try和catch语句的一般语法如下:
throw表达式;
异常处理的执行过程如下:
(1)程序通过正常的顺序执行到达try语句块,然后执行try块内受保护的语句。
(2)如果受保护语句块执行期间没有引起异常,那么跟在try块后的所有catch子句就不执行,直接执行最后一个catch子句后面的语句。
(3)如果在受保护语句块执行期间有异常被抛出,则创建一个异常对象,将该异常对象与try块后的catch子句中的异常类型依次匹配。
(4)如果没找到匹配的catch子句,则运行函数terminate将被自动调用,而函数terminate的默认功能是调用abort终止程序。
(5)如果找到了一个匹配的catch子句,则catch子句后的复合语句会被执行。至此,当前的try块执行完毕。
例如,有以下程序:
程序中throw表达式抛出一个字符串类型的异常,它由具有char*类型参数的catch子句捕获。在存储器分配失败时,程序输出为:
异常引发:内存分配错误!
【例9.1】分析以下程序的执行结果。
解:上述程序中,调用factorial(n)求n!时,若n≤0则抛出一个异常。也就是说,当执行下列语句时,在函数factorial()中抛出异常:
cout<<"-5!="<<f(-5)<<endl;
异常被抛出后,在main()函数中被捕获,异常处理程序输出有关信息后,程序流程跳转到主函数的最后一条语句,输出“程序执行结束.”。而主函数中的下列语句没有被执行:(www.chuimin.cn)
cout<<"5!="<<f(5)<<endl;
程序的执行结果如下:
5!=120
n=-5 不能计算n!.
程序执行结束.
从该程序中可以看出,throw语句可以不出现在try语句块中,而是包含在被调用的自定义函数或系统函数中。在函数体执行过程中若执行了throw语句,则其后的语句都将被跳过。函数抛出的异常可以不在本函数中处理,而是传给它的上级函数(即调用它的函数),若上级不能处理,则再次上传,如此层层上传,如果上传到main函数还无法处理,则只好终止程序的执行。
【例9.2】分析以下程序的执行结果。
解:本程序的执行结果如下:
捕获整数类型:0
捕获字符类型:y
捕获双精度类型:32.657
从程序执行结果可以看出,当执行fun(0)语句时,在函数fun()中抛出一个整数类型的异常,在后面的异常处理块中首先出现的是catch(intm),它可以捕获该异常。当执行fun(1)语句时,在函数fun()中抛出一个字符类型的异常,在后面的异常处理块中首先出现的是catch(intm),它不能捕获该异常,向下匹配到catch(char c),它可以捕获该异常。对于fun(2)语句,其捕获异常的过程是相似的。
注意:catch处理程序的出现次序很重要,因为在一个try块中,异常处理程序是按照它出现的次序依次匹配的。只要找到一个匹配的异常类型,后面的异常处理都将被忽略。
有关C++程序设计基础教程的文章
程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2023-11-07
声明函数模板的一般格式如下:template<模板参数表>函数返回值类型函数模板名(形参表)函数模板定义由关键字template开头,表示声明一个模板。模板参数表写在尖括号<>中,参数一般由关键字class或typename后加一个标识符构成。Class和typename的意义相同,表示后面的标识符是一个参数类型,代表一个潜在的标准类型或用户定义的类型。例如,定义max函数模板求两个数中的较大者。如下面的声明是错误的:可以看出,用函数模板比函数重载更方便,程序更简洁。......
2023-11-07
解:上述程序中,在执行main()中的fun();语句时调用fun()函数,该函数要首先构造对象in1,调用Ins类的构造函数Ins(),并将in1入栈,然后构造对象in2,调用Ins类的构造函数Ins,并将in2入栈,最后执行throw Ex();语句抛掷Ex类异常,在检测到catch时,展开该栈,先是对象in1出栈,执行Ins类的析构函数,再是对象in2出栈,又一次执行Ins类的析构函数。......
2023-11-07
在类声明中,public、private和protected是关键字,称为成员访问限定符,它们分别表示公有、私有和保护的成员访问权限。其他函数不能访问该类的保护数据成员,也不能调用该类的保护成员函数。◇一旦给出了成员访问限定符,它后面的成员都具有这个成员访问权限,直到出现另一个成员访问限定符或类声明结束为止。类的成员函数可以访问类的所有成员,没有任何限制,而类的对象对类的成员的访问是受成员访问控制符制约的。......
2023-11-07
C++是一种编译性的语言,设计好一个C++源程序后,需要经过编译、连接,生成可执行的程序文件,然后执行并调试程序。当C++源程序设计好后,程序员利用一个编辑系统将源程序输入计算机中的某一个文件中,并进行必要的修改。C++源程序文件的扩展名为.cpp。在VC++6.0环境中,编译和连接两个步骤是由系统本身一次完成的。完整的C++程序的开发步骤如图1.2所示。图1.2C++程序开发步骤......
2023-11-07
图2.3对象stu1和stu2实际上,类Student的所有成员函数放在公用区中,每个函数代码有一个地址,类Student的每个对象中只存放自己的数据成员值和指向公共区中对应函数的地址,也就是说,类的成员函数是共享的,如图2.4所示,这种对象的存储空间分配方式不仅节省了存储空间,而且各个对象的数据成员分别存放,互不相干。......
2023-11-07
类的每一个成员函数都有一个隐含的特殊指针,通常称为this指针,this指针的类型就是成员函数所属的类型。通常不显式使用this指针。this指针是C++实现封装的一种机制,它将对象和该对象调用的成员函数连接在一起,在外部看来,每个对象都拥有自己的成员函数。this指针一般用于返回当前对象自身。程序的执行结果如下:s1∶n=2s2∶n=1s3∶n=3this指针大量用于运算符重载成员函数设计中,这将在后面详细介绍。......
2023-11-07
相关推荐