C++语法笔记 – 继承与派生
本文由发表于6年前 | C++ | 评论数 1 |  被围观 6,771 views+

派生类:


定义语法:

class 派生类名 : 继承方式 基类名1, 继承方式 基类名2, …, 继承方式 基类名n
{
	派生类成员声明;
};

一个派生类可以同时由多个基类,这种情况称为多继承。

一个派生类只有一个直接基类的情况,称为单继承。


派生类成员:

是指除了从基类继承来的所有成员之外,新增加的数据和函数成员。


派生类生成过程:

1、吸收基类成员
2、改造基类成员
3、添加新的成员

由于在派生过程中,基类的构造函数和析构函数是不能被继承的,因此要实现一些特别的初始化和扫尾清理工作,就要再派生类中加入新的构造函数和析构函数。


访问控制:

1、共有继承:

当类的继承方式为公有继承时,基类的公有和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问。

2、私有继承:

当类的继承方式为私有继承时,基类中的公有成员和保护成员都以私有成员身份出现在派生类中,而基类的私有成员在派生类中不可直接访问。

可以把继承得到的私有方法重新创建一个公有方法进行覆盖重写:

void Move(float xOff, float yOff){Point::Move(xOff, yOff);}

3、保护继承:

保护继承中,基类的公有和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员不可直接访问。

这样,派生类的其他成员就可以直接访问从基类继承类的公有和保护成员了。


类型兼容规则:

1、派生类的对象可以赋值给基类对象
2、派生类的对象可以初始化基类的引用
3、派生类对象的地址可以赋值给基类的指针

类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代

在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。


派生类的构造函数:

如果基类声明了带有形参的构造函数时,派生类就应当声明构造函数:

派生类名 :: 派生类名(参数总表) : 基类名1(),…, 基类名n(),
内嵌对象名1(内嵌对象参数表1),…, 内嵌对象名m(内嵌对象参数表m)
{ 派生类新增成员的初始化语句; } //注:基类名和成员对象名的顺序是随意的

派生类构造函数执行的一般次序如下:

1、调用基类的构造函数
2、调用内嵌成员对象的构造函数
3、派生类的构造函数中的内容

复制构造函数:

如果要为派生类编写拷贝构造函数,则需要为基类相应的拷贝构造函数传递参数,例如,C类是B类的派生类,C类的拷贝构造函数形式如下:

C :: C(C &c1) : B(c1){…}


派生类的析构函数:

在派生过程中,基类的析构函数也不能继承下来,如果需要析构的话,就要在派生类中声明新的析构函数。派生类析构函数的声明方法与没有继承关系的累中析构函数的声明方法完全相同,只要在函数体中负责把派生类新增的非对象成员的清理工作做好就够了,系统会自己调用基类及对象成员的析构函数来对基类及对象成员进行清理。


派生类成员的作用域分析:

1、在没有虚函数的情况下,如果派生类中声明了与基类成员函数同名的新函数,即使函数的参数表不同,从基类继承的同名函数的所有重载形式也都会被隐藏。
2、在没有虚函数的情况下,如果某派生类的多个基类拥有同名的成员,同时,派生类又新增这样的同名成员,在这种情况下,派生成员将隐藏所有基类的同名成员。
虚基类

解决的问题:当某类的部分或全部直接基类是从另一个共同基类派生而来时,在这些直接基类中从上一级共同基类继承来的成员就拥有相同的名称。这些同名数据成员在内存中同时拥有多个拷贝,同一个函数名会由多个映射,为了只保留一个拷贝,所以引入了虚基类:

class 派生类名 :  virtual 继承方式 基类名
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/c-syntax-notes-inheritance-and-derived.html
关键字: , ,
arthinking Java技术交流群:280755654,入门群:428693174 more
分享到:
 
2011 9/3
如果您有更好的原创技术博文或者观点,欢迎投稿:admin@itzhai.com,或者关注订阅左侧浮动面板的微信号订阅IT宅itread)发送消息。
C++推荐专题
C++
文章评论
    一条评论
给我留言

有人回复时邮件通知我
C++的相关文章
随机文章 本月热门 热评
1 ExtJS拖放技术DragSource拖动到指定区域DDTarget 2011/4/13
2 Java Web笔记 – Servlet技术介绍 生命周期 核心API 类方法调用顺序 2011/11/10
3 数据结构笔记 – 排序算法 直接插入排序算法 2011/9/20
4 InvalidMappingException提示Could not parse mapping document错误的解决方法 2011/5/26
5 软件工程学概述-软件工程 软件危机 软件过程 2011/7/1
6 Struts2笔记 – DMI动态方法调用和通配符配置 2011/6/18
友情推荐 更多
破博客 文官洗碗安天下,武将打怪定乾坤。多么美好的年代,思之令人泪落。
Mr.5's Life 白天是一名程序员,晚上就是个有抱负的探索者
行知-追寻技术之美 关注大数据,分布式系统
我爱编程 编程成长轨迹
Cynthia's Blog 学习笔记 知识总结 思考感悟
 
猜您喜欢
欢迎关注我的公众号 IT宅
关于IT宅 文章归档

IT宅中的文章除了标题注明转载或有特别说明的文章,均为IT宅的技术知识总结,学习笔记或随笔。如果喜欢,请使用文章下面提供的分享组件。转载请注明出处并加入文章的原链接。 感谢大家的支持。

联系我们:admin@itzhai.com

Theme by arthinking. Copyright © 2011-2015 IT宅.com 保留所有权利.