3. 通过继承 Teacher 类的方式,实现 Professor 教授类。 3.1 包含私有的类成员变量 birth(是 Birthday 类对象,代表出生日期),私有变量 *revenue(动态数组,代表收入),私有变量 typeNum(代表收入种类的数量,即 revenue 长度)。 3.2 实现构造函数分别对基类和派生类成员进行初始化,即对 name, salary, birth, *revenue, typeNum 进行初始化。 3.3 实现拷贝构造函数(深拷贝)。
时间: 2023-12-03 14:45:52 浏览: 95
以下是实现 Professor 类的代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
class Birthday {
private:
int year;
int month;
int day;
public:
Birthday(int y, int m, int d) : year(y), month(m), day(d) {}
void print() {
cout << year << "-" << month << "-" << day << endl;
}
};
class Teacher {
protected:
char *name;
double salary;
public:
Teacher(const char *n, double s) {
name = new char[strlen(n) + 1];
strcpy(name, n);
salary = s;
}
virtual ~Teacher() {
delete[] name;
}
virtual void print() {
cout << "Name: " << name << ", Salary: " << salary << endl;
}
};
class Professor : public Teacher {
private:
Birthday birth;
double *revenue;
int typeNum;
public:
Professor(const char *n, double s, int y, int m, int d, double *r, int t) : Teacher(n, s), birth(y, m, d), typeNum(t) {
revenue = new double[typeNum];
for (int i = 0; i < typeNum; i++) {
revenue[i] = r[i];
}
}
Professor(const Professor &p) : Teacher(p), birth(p.birth), typeNum(p.typeNum) {
revenue = new double[typeNum];
for (int i = 0; i < typeNum; i++) {
revenue[i] = p.revenue[i];
}
}
~Professor() {
delete[] revenue;
}
void print() {
cout << "Name: " << name << ", Salary: " << salary << endl;
cout << "Birth: ";
birth.print();
cout << "Revenue: ";
for (int i = 0; i < typeNum; i++) {
cout << revenue[i] << " ";
}
cout << endl;
}
};
int main() {
double revenue[2] = { 10000, 20000 };
Professor p("John", 50000, 1980, 1, 1, revenue, 2);
p.print();
Professor p2 = p;
p2.print();
return 0;
}
```
在上述代码中,我们定义了一个 Birthday 类,用于表示教授的出生日期。在 Professor 类中,我们增加了私有成员变量 birth、revenue 和 typeNum,并在构造函数中对其进行初始化。其中,birth 是 Birthday 类对象,revenue 是一个动态数组,typeNum 表示 revenue 的长度。
在实现拷贝构造函数时,我们采用了深拷贝的方式,将教授对象的所有成员变量都复制到新对象中。需要注意的是,在拷贝构造函数中也需要对基类进行复制。同时,我们也需要在析构函数中删除动态数组 revenue。
最后,在 main 函数中,我们创建了一个 Professor 对象 p,并对其进行了输出。接着,我们创建了另一个 Professor 对象 p2,并将其初始化为 p 的拷贝,再次对其进行输出。
阅读全文