- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 说明 如果虚基类中定义了带参的构造函数,那么虚基类所有的直接或间接的派生类都必须在其构造函数定义中给出对虚基类构造函数的调用,以初始化虚基类的数据成员。 虚基类定义中关键字virtual可以写在派生方式关键字(如public或protected)的后面,也可以写在其前面。 例如: class B: virtual public A {……}; 或 class B: public virtual A {……}; * 说明 虚基类在作为某些类的虚基类时,还可以同时作为另一些类的一般基类。例如: class A {……}; class B: public virtual A {……}; class C: public virtual A {……}; class D: public A {……}; * 小结 1. 基类和派生类 2. 派生类的构造函数与析构函数 3. 多重继承与虚基类 * 作业与上机题 作业: 1)习题3-1至3-7; 2)复习书上相关内容,对书上的例题进行练习。 上机题: 习题3-8, 3-9, 3-10。 * * * class CDerived: public CBase { int m_z; CSub s; public: CDerived(int i, int j, int k):CBase(j),s(k) { m_z = i; cout类CDerived的构造函数\n; } void show() { coutm_x=m_x m_y=s.m_y m_z=m_zendl; } ~CDerived() {cout类CDerived的析构函数\n;} }; 派生类 调用用基类和对象成员的构造函数,完成基类数据成员和对象成员的初始化 对象成员 * int main() { CDerived obj(1, 2, 3); obj.show(); return 0; } 程序的运行结果: 类CBase的构造函数 类CSub的构造函数 类CDerived的构造函数 m_x=2 m_y=3 m_z=1 类CDerived的析构函数 类CSub的析构函数 类CBase的析构函数 * 同名成员和赋值兼容规则 同名成员 在C++中,派生类成员的名字可以与基类成员的名字相同(如成员函数名相同或数据成员名相同),这些名字相同的成员称为同名成员。 如果要在派生类中使用基类中的同名成员,则必须在该同名成员前加上基类名和作用域运算符::。 * 赋值兼容规则 在C++中,以public方式继承的派生类可以看成是其基类的子类型。 赋值兼容规则是指在需要基类对象的任何地方都可以使用子类型对象来替代。 * * 具有多个层次的单继承 细分“学生类” * 【例3-4】通过具有多个层次的单继承 定义研究生类 本例对例3-1的代码进行修改,增加研究生类。 * …… class CGraStudent: public CStudent { static unsigned long m_nCount; protected: char* m_strSupervisorName; //导师姓名 public: CGraStudent(char* strName = , char* strID = , char cSex = 0, int nYear = 0, int nMonth = 0, int nDay = 0, char* strMajor = , char* strSupervisorName = ); void SetSupervisorName(char* strSupervisorName); void GetSupervisorName(char* strSupervisorName) const; void DisplayInfo() const; static unsigned long GetCount(); }; * CGraStudent::CGraStudent(char* strName, char* strID, char cSex, int nYear, int nMonth, int nDay, char* strMajor, char* strSupervisorName): CStudent(strName, strID, cSex, nYear, nMonth, nDay, strMajor) { m_strSupervisorName = new char[strlen(strSupervisorName)+1]; strcpy(m_strSupervisorName, strSupervisorNa
文档评论(0)