例1:在异常处理中处理析构函数。
和顺网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。程序:
#include
#include
using namespace std;
class Student
{
public:
Student(int n, string nam)//定义构造函数
{
cout << "constructor-" << n << endl;
num = n;
name = nam;
}
~Student()//定义析构函数
{
cout << "destructor-" << num << endl;
}
void get_data();
private:
int num;
string name;
};
void Student::get_data()
{
if (num == 0)//如果num=0,抛出int型变量num
{
throw num;
}
else//如果num不等于0,输出num,name
{
cout << num << " " << name << endl;
}
cout << "in get_data()" << endl;
}
void fun()
{
Student stud1(1101, "tan");
stud1.get_data();
Student stud2(0, "li");
stud2.get_data();
}
int main()
{
cout << "main begin" << endl;//表示主函数开始了
cout << "call fun()" << endl;//调用fun()函数
try
{
fun();
}
catch (int n)
{
cout << "num=" << n << ",error!" << endl;//num=0出错
}
cout << "main end" << endl;//表示主函数结束
system("pause");
return 0;
}
程序分析:
main begin
call fun()
constructor-1101
1101 tan
in get_data()
constructor-0
destructor-0
destructor-1101
num=0,error!
main end
请按任意键继续. . .
例2:在上题的基础上进行变形,分析执行过程,由于异常处理调用了哪些析构函数。
程序:
#include
#include
using namespace std;
class Student
{
public:
Student(int n, string nam)//定义构造函数
{
cout << "constructor-" << n << endl;
num = n;
name = nam;
}
~Student()//定义析构函数
{
cout << "destructor-" << num << endl;
}
void get_data();
private:
int num;
string name;
};
void Student::get_data()
{
if (num == 0)//如果num=0,抛出int型变量num
{
throw num;
}
else//如果num不等于0,输出num,name
{
cout << num << " " << name << endl;
}
cout << "in get_data()" << endl;
}
void fun()
{
Student stud1(1101, "tan");
stud1.get_data();
try
{
Student stud2(0, "li");
stud2.get_data();
}
catch (int n)
{
cout << "num=" << n << ",error!" << endl;//num=0出错
}
}
int main()
{
cout << "main begin" << endl;//表示主函数开始了
cout << "call fun()" << endl;//调用fun()函数
fun();
cout << "main end" << endl;//表示主函数结束
system("pause");
return 0;
}
程序分析:和上题的不同之处在与,本题在输出“destructor-0”后,再执行catch语句,输出“num=0,error!”,fun函数执行完毕,在流程转回main函数之前先调用stud1的析构函数,输出“destructor-1101”,最后执行main函数中最后一行cout语句,输出“main end”。
运行结果:
main begin
call fun()
constructor-1101
1101 tan
in get_data()
constructor-0
destructor-0
num=0,error!
destructor-1101
main end
请按任意键继续. . .
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。