16.2继承的工作方式GraduateStudent的内存布局,与“gs是研究生,当然也是大学生”相吻合。this指针Student部分GraduateStudent对象尺寸GraduateStudent增加部分图16-2GraduateStudent内存布局
• GraduateStudent的内存布局,与“gs是研究 生,当然也是大学生”相吻合。 Student部分 GraduateStudent 增加部分 GraduateStudent 对象尺寸 this指针 图 16-2 GraduateStudent内存布局
16.3派生类的构造在ch161.cpp的例子中,并没有声明派生类GraduateStudent的构造函数根据类的实现机制,派生对象创建时,将执行其默认的构造函数。该默认构造函数会首先调用基类的默认构造函数。而基类没有默认构造函数,但正好匹配默认参数的构造函数:Student(char * pName ="no name
• 在ch16_1.cpp的例子中,并没有声明派生类 GraduateStudent的构造函数。 • 根据类的实现机制,派生对象创建时,将执 行其默认的构造函数。 • 该默认构造函数会首先调用基类的默认构造 函数。 而基类没有默认构造函数,但正好匹配默认 参数的构造函数: Student(char * pName = “no name” )
16.3派生类的构造派生类自已的成员函数可以直接访问基类的保护数据成员派生类一般通过基类的接口(成员函数)去访问它们的保护数据成员派生类一般通过基类的构造函数初始化它们的保护数据成员。一旦基类的实现有错误,只要不涉及接口那么基类的修改不会影响派生类的操作
• 派生类自己的成员函数可以直接访问基类的 保护数据成员。 • 派生类一般通过基类的接口(成员函数)去 访问它们的保护数据成员。 • 派生类一般通过基类的构造函数初始化它们 的保护数据成员。 • 一旦基类的实现有错误,只要不涉及接口, 那么基类的修改不会影响派生类的操作
16.3派生类的构造类与类之间,你做你的,我做我的,以接口作沟通基类与子类也是如此在构造一个子类时,由基类的构造函数完成其基类部分的构造
• 类与类之间,你做你的,我做我的,以接口 作沟通。 • 基类与子类也是如此。 • 在构造一个子类时,由基类的构造函数完成 其基类部分的构造
16.3派生类的构造研究生类的构造例16-2:classGraduateStudent:public Student{public :GraduateStudent(char*pName,Advisor&adv): Student(pName),advisor(adv){qualifierGrade = O ;人// 其余见ch16_1.cpp基类数据成员的初始化方式
例16-2:研究生类的构造 class GraduateStudent : public Student { public : GraduateStudent( char * pName , Advisor & adv ) :Student(pName) , advisor(adv) { qualifierGrade = 0 ; } //其余见ch16_1.cpp } ; 基类数据成员的 初始化方式