【一天一篇CPP】继承和派生:基础知识和继承方式与访问属性
2013-10-10 13:25
453 查看
1.介绍:面向对象程序设计的4个特点:抽象、封装、继承、多态性。
C++中的可重用性是通过继承这一机制来实现的。【父类派生出子类,子类继承于父类】。
派生类是基类的具体化,基类是派生类的抽象。
2.形式:在类的声明处
class 派生类名 : [ 继承方式 ] 基类名
{
............//派生类新增加的成员
};
继承方式有:public(公用的),private(私有的)/protected(受保护的),当不写的时候默认为private(私有的)。
3.构建一个派生类的3个工作:
A 从基类接收所有成员(除构造和析构函数)【需要选择适合的基类,来避免多次派生后对象中的大量冗余数据】
B 调整接收的成员 【通过继承方式的不同,可改变基类成员在派生类中的访问属性,将在下面第5点讲解】,此外可以通过同名成员去覆盖(取代)继承来的数据成员和函数成员【对于函数成员,需要参数也一致,否则是重载而不是覆盖】
C 在声明派生类时增加它自己的成员,还要加上它自己的构造函数和析构函数。
4.派生类的访问属性
A 基类的成员函数访问基类成员【可访问】
B 派生类的成员函数访问派生类中新增加的成员【可访问】
C 基类的成员函数访问派生类的成员【不可访问,因为派生类对于基类是不可知的】
D 通过派生类的对象直接访问派生类的成员【只可以访问公有成员】
E 派生类的成员函数访问基类的成员。【要看继承方式成员在基类的访问属性,将在下面第5点讲解】
F 通过派生类对象直接访问基类的成员。【要看继承方式成员在基类的访问属性,将在下面第5点讲解】
5.三种继承方式详解:
A 公有继承(public inheritance)基类的公有成员和保护成员在派生类中保持原有访问属性【也就是派生类的成员函数可以访问它们,而通过派生类的对象,只能访问其中的公有的】,私有成员仍为基类私有【只有基类函数成员才能访问】。
B 私有继承(private inheritance)【少用】基类的公有成员和保护成员变为私有成员【派生类的成员函数可访问,但是派生类对象不能直接访问】,私有成员仍为基类私有【只有基类函数成员才能访问】。
C 保护继承(protected inheritance)基类的公有成员和保护成员在派生类中都变为保护成员【派生类的成员函数可以访问它们,通过派生类的对象则不可以】,私有成员仍为基类私有【只有基类函数成员才能访问】。 【保护的设计初衷:不能被外界通过类对象引用,但是能被派生类的成员引用】
6.疑难解答:
A CPP允许多级继承吗?
允许,例如A <- B <- C指的是B派生于A,C派生于B。B是A的直接派生类,C是A的间接派生类。访问属性依次递归下去。
例如A的公有成员通过私有继承,到了子类B就是私有成员,不论通过什么类型的继承,B的子类C都不能直接访问这个在A中的公有成员,至于C能否访问B中的某些成员,都是类似,要依据它们之间的继承方式和B中的成员访问属性决定。
B CPP允许多继承吗?
允许,如 class menuWindow: public window,public menu
{
...........//新增加的成员
};
C.cpp经常通过继承和组合实现软件重用,那么什么是组合?一个类以另一个类的对象作为数据成员,则称为类的组合。
继承和组合是软件重用的重要方式,但组合强调“拥有什么”,而继承强调“是什么”。
D.一些编译的提示:
假如基类的实现单独存在于一个文件,由于基类是单独编译的,编译程序的时候只需要对派生类的新增功能进行编译。但假如修改基类,基类和派生类都要重新编译。因此常常将基类的实现单独放置在一个文件,而减少重新编译的时间。【类库也是类似的,类的声明放在一个头文件,然后实现放在另一个文件或以编译完的目标代码形式存在】
F.软件开发中尽可能地通过继承一批新的类,而不是对已有类加以修改的原因:
A基类的改变会牵涉到很多派生类的内容改变,可能导致很多错误发生
B用户往往不能得知基类的源代码【为了软件开发的保密】
C基类常常就是通用的框架或抽象类,不怎么需要修改
D修改基类容易破坏原有类功能的规划和软件系统的层次关系。
C++中的可重用性是通过继承这一机制来实现的。【父类派生出子类,子类继承于父类】。
派生类是基类的具体化,基类是派生类的抽象。
2.形式:在类的声明处
class 派生类名 : [ 继承方式 ] 基类名
{
............//派生类新增加的成员
};
继承方式有:public(公用的),private(私有的)/protected(受保护的),当不写的时候默认为private(私有的)。
3.构建一个派生类的3个工作:
A 从基类接收所有成员(除构造和析构函数)【需要选择适合的基类,来避免多次派生后对象中的大量冗余数据】
B 调整接收的成员 【通过继承方式的不同,可改变基类成员在派生类中的访问属性,将在下面第5点讲解】,此外可以通过同名成员去覆盖(取代)继承来的数据成员和函数成员【对于函数成员,需要参数也一致,否则是重载而不是覆盖】
C 在声明派生类时增加它自己的成员,还要加上它自己的构造函数和析构函数。
4.派生类的访问属性
A 基类的成员函数访问基类成员【可访问】
B 派生类的成员函数访问派生类中新增加的成员【可访问】
C 基类的成员函数访问派生类的成员【不可访问,因为派生类对于基类是不可知的】
D 通过派生类的对象直接访问派生类的成员【只可以访问公有成员】
E 派生类的成员函数访问基类的成员。【要看继承方式成员在基类的访问属性,将在下面第5点讲解】
F 通过派生类对象直接访问基类的成员。【要看继承方式成员在基类的访问属性,将在下面第5点讲解】
5.三种继承方式详解:
A 公有继承(public inheritance)基类的公有成员和保护成员在派生类中保持原有访问属性【也就是派生类的成员函数可以访问它们,而通过派生类的对象,只能访问其中的公有的】,私有成员仍为基类私有【只有基类函数成员才能访问】。
B 私有继承(private inheritance)【少用】基类的公有成员和保护成员变为私有成员【派生类的成员函数可访问,但是派生类对象不能直接访问】,私有成员仍为基类私有【只有基类函数成员才能访问】。
C 保护继承(protected inheritance)基类的公有成员和保护成员在派生类中都变为保护成员【派生类的成员函数可以访问它们,通过派生类的对象则不可以】,私有成员仍为基类私有【只有基类函数成员才能访问】。 【保护的设计初衷:不能被外界通过类对象引用,但是能被派生类的成员引用】
6.疑难解答:
A CPP允许多级继承吗?
允许,例如A <- B <- C指的是B派生于A,C派生于B。B是A的直接派生类,C是A的间接派生类。访问属性依次递归下去。
例如A的公有成员通过私有继承,到了子类B就是私有成员,不论通过什么类型的继承,B的子类C都不能直接访问这个在A中的公有成员,至于C能否访问B中的某些成员,都是类似,要依据它们之间的继承方式和B中的成员访问属性决定。
B CPP允许多继承吗?
允许,如 class menuWindow: public window,public menu
{
...........//新增加的成员
};
C.cpp经常通过继承和组合实现软件重用,那么什么是组合?一个类以另一个类的对象作为数据成员,则称为类的组合。
继承和组合是软件重用的重要方式,但组合强调“拥有什么”,而继承强调“是什么”。
D.一些编译的提示:
假如基类的实现单独存在于一个文件,由于基类是单独编译的,编译程序的时候只需要对派生类的新增功能进行编译。但假如修改基类,基类和派生类都要重新编译。因此常常将基类的实现单独放置在一个文件,而减少重新编译的时间。【类库也是类似的,类的声明放在一个头文件,然后实现放在另一个文件或以编译完的目标代码形式存在】
F.软件开发中尽可能地通过继承一批新的类,而不是对已有类加以修改的原因:
A基类的改变会牵涉到很多派生类的内容改变,可能导致很多错误发生
B用户往往不能得知基类的源代码【为了软件开发的保密】
C基类常常就是通用的框架或抽象类,不怎么需要修改
D修改基类容易破坏原有类功能的规划和软件系统的层次关系。
相关文章推荐
- C++基础:继承与派生(声明 继承方式 访问规则)
- 2018/01/08JAVA 基础 / 接口与继承/Java关键词:变量引用 super 调用父类对象方法/构造方法【或者访问父类对象属性】的方式归纳
- 2018/01/08JAVA 基础 / 接口与继承:调用父类/子类的类方法、对象方法,访问父类的类属性、对象属性的方式汇总
- C++基础(八)继承与派生——派生类成员的访问属性
- CPP基础知识—关于菱形继承
- C++学习之路—继承与派生(一):基本概念与基类成员的访问属性
- c++ 继承/派生、访问属性、构造函数
- 关于C++程序设计的基础核心之二:继承与派生的基本知识
- 20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)
- 浅谈c++类成员的三种访问控制方式和类继承派生时的三种继承方式
- 对话框基础知识(二)--访问控件的五种方式
- android Kotlin 继承、派生、接口、构造方式,方法、属性重写
- c++中的成员访问级别和派生继承方式
- C#基础知识复习1代码规范-执行流程(c#)-面向对象-引用命名空间-封装-继承-访问修饰符-虚方法-静态成员-多态-抽象类等
- 类的继承方式对子类对外访问属性影响,赋值兼容性原则
- 第11周-继承派生的访问属性
- 讲述Javascript 实现继承的方式(基础知识)
- 【一天一篇CPP】多继承及其二义性(multiple inheritance,也叫多重继承,但不是多层继承)
- C++继承时派生类的成员访问属性
- 20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)