C++理论 - 下编

避免程序运行后窗口自动关闭


在主调函数中return语句前添加cin.get();

int main(void)
{
	cin.get();  // 避免窗口自动关闭 
	return 0;
}

异常处理


即事先分析程序运行时可能出现的异常情况,并分别制定处理方法,如拨打电话时拨了一个空号,系统提示此号码为空号,而不是无休止地等待;
异常不完全等于出错,异常是出现与人们期望不同的情况;

异常处理的方法

  • 检查(try):把需要检查的语句放入try语块中;
  • 捕捉(catch):当try语块出现异常时,捕捉异常信息,并处理异常;
  • 抛出(throw):当try语块出现异常时,发出一个异常信息(给上一级函数);

throwcatch是独立同步进行的;
try-catch语句作为整体使用,就像if-else一样,当然也可以只有try,就像只有if
try-catch语句中try只能有一个,但catch可有多个,便于与不同异常信息进行匹配处理;

  • catch语法
1. 只指定需要捕捉的异常信息类型 
catch(double)
catch(char)
2. 指定需要捕捉的异常信息类型和变量名
catch(double a)
catch(char b) 
3. ...,表示捕捉任何类型的异常信息,一般放到所有catch的最后,相当于“其他” 
catch(...)
4. 把处理异常的任务交给上一级函数
catch(int) 
{
	throw;
}
  • 例程
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
	double triangleArea(double,double,double);
	double a,b,c;
	
	cout<<"请输入三角形的三边长.(Please typing three side length of the triangle.)"<<endl;
	cin>>a>>b>>c;
	try
	{
		while(a>0 && b>0 && c>0)
		{
			cout<<"此三角形的面积为:(Area of this triangle is:)"<<"\n"<<triangleArea(a,b,c)<<endl;
			cout<<"请继续输入:(Please go on typing:)"<<endl;
			cin>>a>>b>>c; 
		}
	}	
	catch(double) // 若 try语块中发生异常,则跳到此 catch语块 
	{
		cout<<"a="<<a<<",b="<<b<<",c="<<c<<",报错!这不是一个三角形!(Error!that is not a triangle!)"<<endl;
	}
	cout<<"程序结束.(program exit.)"<<endl;
	return 0;
}

double triangleArea(double a,double b,double c)  
{
	if (a+b<=c||b+c<=a||c+a<=b)throw a; // 执行完 throw语句,立即结束并离开本函数
	double s=(a+b+c)/2;
	return sqrt(s*(s-a)*(s-b)*(s-c));
}

// throw 抛出的a是double型,catch捕捉的异常也是double型,两者类型匹配;

在这里插入图片描述

在函数声明时指定只能抛出的异常类型

double triangleArea(double,double,double) throw(double);// 该函数只能抛出double类型异常信息;
double triangleArea(double,double,double) throw(double,int,char,float);// 该函数能抛出double,intd等类型异常信息
double triangleArea(double,double,double) throw();// 该函数不能抛出异常信息;

C++头文件


在C++中可以用C语言中的所有头文件,且在C语言库的基础上做了较大改变,为了区分C语言的库,新式C++的头文件不采用后缀.h,而C语言的头文件保留了后缀它,如C语言中数学函数库为math.h在C++中作改变后命名其为cmath

不需.h后缀的前提是使用std命名空间using namespace std;

在这里插入图片描述

命名空间


  • 作用一:相当于对某些代码取别名;
  • 作用二:用于处理程序中常见的命名冲突;
1. 使用命名空间
#include<iostream>
using namespace std;//std是C++中的标准命名空间

cout<<"age: "<<age<<endl;

2. 不使用命名空间
#include<iostream.h>

std::cout<<"age: ";
std::cout<<age;
std::cout<<endl;

综上,命名空间把std::cout取别名cout,iostream.h命名为iostream,代码更加高效直观;

类和动态内存分配


动态内存分配即在程序运行时按需为数据分配内存,使用完马上释放,而不是在编程的时候把数据的内存大小、建立和释放时间写死;

参考连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Truffle7电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值