c++ 1. 实现 Birthday 类。包含私有变量 year,month,day 三个数据成员。
时间: 2023-12-03 21:45:40 浏览: 114
以下是实现 Birthday 类的示例代码:
```cpp
class Birthday {
private:
int year;
int month;
int day;
public:
// 构造函数
Birthday(int y, int m, int d) {
year = y;
month = m;
day = d;
}
// 获取年份
int getYear() const {
return year;
}
// 获取月份
int getMonth() const {
return month;
}
// 获取日期
int getDay() const {
return day;
}
};
```
以上代码定义了一个 Birthday 类,包含三个私有变量 year、month 和 day,并实现了一个构造函数和三个获取变量值的成员函数。在使用时,可以先创建一个 Birthday 对象,并通过构造函数初始化 year、month 和 day 的值,然后通过调用成员函数获取相应的变量值。
相关问题
用C++7-4 计算年龄 分数 10 作者 吴恋 单位 贵州师范学院 定义一个Birthday类,其成员变量有3个整形变量(出生的年月日):year,month,day;提供构造方法对这3个成员变量进行初始化;提供成员变量的get、set方法;成员函数有getAge(),功能是实现计算到2017年12月25日时该Birthday对象的年龄。编写程序测试这个类。
#include <iostream>
using namespace std;
class Birthday {
private: //私有变量
int year, month, day;
public: //公有方法
Birthday(int y, int m, int d) { //构造函数
year = y;
month = m;
day = d;
}
void setYear(int y) { //设置年份
year = y;
}
void setMonth(int m) { //设置月份
month = m;
}
void setDay(int d) { //设置天数
day = d;
}
int getYear() { //获取年份
return year;
}
int getMonth() { //获取月份
return month;
}
int getDay() { //获取天数
return day;
}
int getAge() { //获取年龄
int age = 0;
age = 2017 - year;
if (month < 12) {
age--;
} else if (month == 12 && day < 25) {
age--;
}
return age;
}
};
int main() {
Birthday b(1995, 10, 29); //实例化Birthday对象
cout << "年龄为:" << b.getAge() << endl; //输出年龄
return 0;
}
3. 通过继承 Teacher 类的方式,实现 Professor 教授类。 3.1 包含私有的类成员变量 birth(是 Birthday 类对象,代表出生日期),私有变量 *revenue(动态数组,代表收入),私有变量 typeNum(代表收入种类的数量,即 revenue 长度)。 3.2 实现构造函数分别对基类和派生类成员进行初始化,即对 name, salary, birth, *revenue, typeNum 进行初始化。 3.3 实现拷贝构造函数(深拷贝)。
以下是实现 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 的拷贝,再次对其进行输出。
阅读全文