您好,登錄后才能下訂單哦!
例1:在異常處理中處理析構函數。
程序:
#include<iostream>
#include<string>
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<iostream>
#include<string>
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
請按任意鍵繼續. . .
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。