一文带你掌握C++中的继承.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

一文带你掌握C++中的继承

目录一、继承的概念及定义1.1继承的概念1.2继承的定义1.2.1继承的格式1.2.2继承基类成员访问方式的变化1.2.3总结:二、基类和派生类对象赋值转换三、继承中的作用域四.派生类的默认成员函数五、继承与友元六、继承与静态成员七、菱形继承及菱形虚拟继承7.1菱形继承的问题7.2解决方法7.3虚拟继承解决数据冗余和二义性的原理

一、继承的概念及定义

1.1继承的概念

继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。

#includeiostream

usingnamespacestd;

classPerson

public:

voidPrint()

coutname:_nameendl;

coutage:_ageendl;

protected:

string_name=peter;//姓名

int_age=18;//年龄

//继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了

//Student和Teacher复用了Person的成员。

classStudent:publicPerson

protected:

int_stuid;//学号

classTeacher:publicPerson

protected:

int_jobid;//工号

intmain()

Students;

Teachert;

s.Print();

t.Print();

return0;

}

1.2继承的定义

1.2.1继承的格式

Person是父类,也称作基类。Student是子类,也称作派生类。

1.2.2继承基类成员访问方式的变化

类成员/继承方式public继承(子类)protected继承(子类)private继承(子类)基类的public成员publicprotectedprivate基类的protected成员protectedprotectedprivate基类的private成员在派生类中不可见在派生类中不可见在派生类中不可见

1.2.3总结:

1.基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。

2.基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的。

3.实际上面的表格我们进行一下总结会发现,基类的私有成员在子类都是不可见。基类的其他成员在子类的访问方式==Min(成员在基类的访问限定符,继承方式),publicprotected

private。

4.使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过

最好显示的写出继承方式。

5.在实际运用中一般使用都是public继承,几乎很少使用protetced/private继承,也不提倡

使用protetced/private继承,因为protetced/private继承下来的成员都只能在派生类的类里

面使用,实际中扩展维护性

二、基类和派生类对象赋值转换

1.派生类对象可以赋值给基类的对象/基类的指针/基类的引用。这里有个形象的说法叫切片或者切割。寓意把派生类中父类那部分切来赋值过去。

2.基类对象不能赋值给派生类对象。

3.基类的指针或者引用可以通过强制类型转换赋值给派生类的指针或者引用。但是必须是基类的指针是指向派生类对象时才是安全的。

#includeiostream

usingnamespacestd;

classPerson

protected:

string_name;//姓名

string_sex;//性别

int_age;//年龄

classStudent:publicPerson

public:

int_No;//学号

voidTest()

Studentsobj;

文档评论(0)

182****6697 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档