最后一步:定义 main 函数¶
int main()
{
Professor prof1(24, "colin", "male", 1993, 1, 31);
prof1.output();
cout << "\n这个生日是好友O的,改正下:\n";
prof1.input(1993, 3, 13);
prof1.output();
return 0;
}
Tips:
阅读代码时顺序:
先看main函数,在main里看用到了Professor类,了解到它定义了一个对象prof1,然后就有两个疑问:
括号里的每一形参代表的是什么意思
prof1(24, "colin", "male", 1993, 1, 31)prof1.input() 和 output()具体是干嘛的
与疑问直接相关的是Professor类,所以找到它,知道:
成员函数是类内声明,类外定义,所以应该在类外详细看它定义了什么
成员数据是一个BirthDate类的对象birthday, 知道下一步应该去看它。
看到类外的定义,发现Professor类的构造函数有调用了Teacher类的构造函数和birthday对象的构造函数,看到Professor类的构造函数的形参中,前面三个是给Teacher类,后三个是给birthday对象的。成员函数涉及到Teacher类的,和birthday对象
3.好了,我们下一步就是看BirthDate类和Tearcher类。
BirthDate类的构造函数知道,1993 1 31 这个三个形参分别给year month day 三个变量赋值。input() 的功能是把输入三个整数赋值给 year month day 三个变量output() 是输入 这个三个变量的值 Teacher类的构造函数知道,24 “colin” “male” 分别赋值给 num name sex 三个变量的output() 是输入 这个三个变量的值
阅读明白之后,就是教你怎么写的过程了。
- 题目提到多少个类,就定义多少个,然后分别按照题目的要求给类定义成员函数和数据函数
- 看11.8的题目(388页),先写基类 Teacher 再写 引用到的BirthDate 类,最后才是派生类Professor
- 把类写完了,最后就是写main()函数实现这些功能了。
分成以下步骤:
由于下面要用到string 声明字符串变量,所以记得要包含string 头文件:
#include <string>
class Teacher
{
public:
Teacher(int, string, string);
//每个类都要定义构造函数,这样的好处是可以在定义一个对象时,顺便赋值
void output();
//题目要求最后都得输入值,所以在每个类中都定义输入的函数,派生类的就直接调用基类的就可以了
private:
int num;
string name;
string sex;
};
Teacher::Teacher(int nu, string na, string s):
num(nu), name(na), sex(s){}
void Teacher::output()
{
cout <<"学号: " <<num <<"\t姓名: " <<name <<"\t性别: " <<sex <<'\t';
}
class BirthDate
{
public:
BirthDate(int, int, int);
void input(int, int, int);
void output();
private:
int year;
int month;
int day;
};
BirthDate::BirthDate(int y, int m, int d):
year(y), month(m), day(d){}
void BirthDate::input(int y, int m, int d)
{
year = y;
month = m;
day = d;
}
void BirthDate::output()
{
cout <<year <<"年" <<month <<"月" <<day <<"日" <<endl;
}
class Professor:public Teacher
{
public:
Professor(int, string, string, int, int, int);
void input(int y, int m, int d){ birthday.input(y, m, d); }
void output();
private:
BirthDate birthday; //参见 388页的继承与组合
};
Professor::Professor(int nu, string na, string s, int y, int m, int d):
Teacher(nu, na, s), birthday(y, m, d){}
void Professor::output()
{
Teacher::output();
birthday.output();
//这里不能是BirthDate::output(),因为已经定义了对象,直接引用对象的成员函数
}
int main()
{
Professor prof1(24, "colin", "male", 1993, 1, 31);
prof1.output();
cout << "\n这个生日是好友O的,改正下:\n";
prof1.input(1993, 3, 13);
prof1.output();
return 0;
}