学生类Student 数据成员(访问权限定义为protected): 学生姓名(char*name)、性别(boolsex、学号(intsno)、出生日期 (Birthdaybirth)、专业课门数(intnum)、专业课成绩(double*score) 成员西数(访问权限定义为public): ?构造西数:对学生的姓名、性别、学号、出生日期、专业课门数进行初始 化 Student(char *_name, bool _sex, int _sno, int year, int month, int day, int _пит): 注意: 1.在构造两数中为score申请堆空间数组 2.加入异常处理机制 ?拷贝构造西数:数据成员初始化(避免浅拷贝) Student(constStudent&xst); 注意:加入异常处理机制 ?析构两数:释放系统资源 ~StudentO;的程序应该怎么写(主要写异常处理即可)
时间: 2024-02-20 13:01:02 浏览: 146
好的,那么我来给你提供一个C++的程序示例,用于实现这个学生类的构造函数、拷贝构造函数和析构函数,包含异常处理机制。
```
#include <iostream>
#include <cstring>
#include <exception>
using namespace std;
class Student {
protected:
char* name;
bool sex;
int sno;
struct Birthday {
int year;
int month;
int day;
} birth;
int num;
double* score;
public:
Student(char* _name, bool _sex, int _sno, int year, int month, int day, int _num) {
try {
name = new char[strlen(_name) + 1];
score = new double[_num];
} catch (bad_alloc& e) {
cerr << "Memory allocation error: " << e.what() << endl;
exit(1);
}
strcpy(name, _name);
sex = _sex;
sno = _sno;
birth.year = year;
birth.month = month;
birth.day = day;
num = _num;
}
Student(const Student& xst) {
try {
name = new char[strlen(xst.name) + 1];
score = new double[xst.num];
} catch (bad_alloc& e) {
cerr << "Memory allocation error: " << e.what() << endl;
exit(1);
}
strcpy(name, xst.name);
sex = xst.sex;
sno = xst.sno;
birth.year = xst.birth.year;
birth.month = xst.birth.month;
birth.day = xst.birth.day;
num = xst.num;
for (int i = 0; i < num; i++) {
score[i] = xst.score[i];
}
}
~Student() {
try {
delete[] name;
delete[] score;
} catch (exception& e) {
cerr << "Memory deallocation error: " << e.what() << endl;
exit(1);
}
}
};
```
在这个程序中,我们首先在构造函数和拷贝构造函数中使用try-catch语句来捕获bad_alloc异常,以防止内存申请失败。如果出现异常,我们使用cerr输出错误信息,并使用exit函数退出程序。
在析构函数中,我们同样使用try-catch语句来捕获exception异常,以防止内存释放失败。如果出现异常,我们同样使用cerr输出错误信息,并使用exit函数退出程序。
总之,使用异常处理机制可以帮助我们保证程序的健壮性,并及时作出响应。
阅读全文