目的:了解三种继承方式,并清楚其中的差别
🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃
10.1 继承与派生的概念
1.面向对象技术强调软件的可重用性,所以C++语言提供了类的继承机制,解决了软件重用问题
3.类的继承的定义:一个新类从已有的类那里获得其已有的特性的现象,在C++中所谓的“继承“就是一个已存在的的类的基础上建立一个新的类
3.类的派生:从已有的类产生一个新的子类,称为类的派生
a:派生类继承了基类的所有数据成员和成员函数,其可以对成员做必要的增加或调整,且一个基类可以派生出多个派生类,每个派生类又可以作为基类在派生出新的派生类,一次基类和派生类是相对而言的,一代一代派生下去,即形成了类的继承层次结构
b:派生的分类:多级派生+单级派生
4.注意??:
a:类的继承的角度是从派生类到基类
b:类的派生的角度是从基类到派生
c:这个已存在的类称为“基类(base class)”或“父类(father class)”,新建立的类称为“派生类(derived class)”或“子类(son class)”
d:基类与派生类总的就是一句话:派生类是基类的具体化,而基类则是派生类的抽象,这句话也体现类与对象的关系
🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃
10.2 派生类的声明方式
1.形式: class 派生类名:[继承方式] 基类名
? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? 派生类新增加成员
? ? ? ? ? ? };
class Student : public Student
{
public:
void display_1()
cout<<"true"<<endl;
}
2.继承方式包括:public(公用的)、private(私有的)、protected(受保护的),继承方式是可选的,如果不写此项,则默认为private(私有的)
🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃
10.3 派生类的构成
1.派生类的说明:
a:做基类的类必须要定义,其原因显而易见,每个派生都包含并且都可以访问其基类的成员,为了使用这些成员,派生类必须知道它们是谁
b:如果要声明,但不实现一个派生类,则只要声明类即可,不用加继承方式和基类的类型
class Derived:public Buse;//??,在这种只声明不实现的情况是错误的
class Dervied;//正确的
c:派生类有两部分构成:继承+定义新的成员
d:友元关系、构造函数、析构函数是不能继承的
e:基类定义了静态成员,每个静态成员只有一个派生和基类都可使用
f:静态成员为public,派生类可用的,但若是private,则派生类是不可以使用的,后年我们也会提到访问属性,则在这里不过多追叙了
2.派生类的3个工作部分
a:从基类接收成员,派生类把基类(除友元关系、构造函数、析构函数)没有选择的都继承过来了
b:调整从基类接收的成员,无选择的接收基类成员是不可避免的,但是程序员可以对这些成员的属性进行某些调整,利用访问属性来间接达到不想接收的目的
c:在声明派生类时新增加的成员,这很重要,体现了派生类对基类功能的拓展,这一部分后面也有知识点会补充的
🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃
10.4 派生类成员的访问属性
1.基类成员和友元访问基类成员
2.派生类的成员和友元访问派生类自己新增加的成员
3.基类的成员函数访问派生类的成员,基类是不可以直接访问派生类的,不过可以通过虚函数实现
4.派生类的成员函数访问基类的成员,基类的私有成员派生类是不可访问的
5.在派生类外访问基类成员
6.三种方式继承的访问属性
7.4种访问属性:
a:公用的,派生类内类外都可以访问
b:受保护的,派生类可以访问,派生类外不可以访问,其下一层的派生类可以访问
c:私有的,派生类内可以访问,派生类外不能访问
d:不可访问的,派生类内外都不能访问
注意??:无论哪一种继承方式,在派生类中是不能访问基类的私有成员,私有成员只能被本类的成员函数所访问,毕竟派生类与基类不是同一类的
共同学习,欢迎指正!