C++派生类

作者: Ritchie_Li | 来源:发表于2022-10-03 21:51 被阅读0次

派生类的概念和定义

① 定义格式

派生类定义的语法为:

class 派生类名:继承方式1 基类名1, 继承方式2 基类名2,…

{

    private:

        派生类的私有数据和函数

public:

        派生类的公有数据和函数

protected:

        派生类的保护数据和函数

};

说明:

•继承方式1 基类名1, 继承方式2 基类名2,…”为基类名表, 表示当前定义的派生类的各个基类。

•如果基类名表中只有一个基类,表示定义的是单继承;如果基类名表中有多个基类,表示定义的是多继承。

•继承方式指定了派生类成员以及类外对象对于从基类继承来的成员的访问权限。继承方式有三种:public:公有继承;private:私有继承;protected:保护继承。不管是哪种继承方式,基类的私有成员在派生类的作用域内不可见。派生类的成员函数不能直接访问基类的私有成员,但可直接访问基类的公有和保护成员。

•在派生类的定义中,每一种继承方式只限定紧跟其后的那个基类。如果不显式给出继承方式,系统默认为私有继承。

② 继承分类

•单一继承时的构造函数

派生类名::派生类名(基类所需的形参,本类成员所需的形参):基类名(参数)

{

    本类成员初始化赋值语句;

};

•多继承:允许派生类同时具有多个基类,基类和派生构成有向图的层次结构。多继承时的构造函数

派生类名::派生类名(基类1形参,基类2形参,...基类n形参,本类形参):基类名1(参数), 基

类名2(参数), ...基类名n(参数)

{

    本类成员初始化赋值语句;

};

③ 二义性问题

一般来说,在派生类中对于基类成员的访问应该是唯一的,但是,由于多继承中派生类拥有多个基类,如果多个基类中拥有同名的成员,那么,派生类在继承各个基类的成员之后,当我们调用该派生类成员时,由于该成员标识符不唯一,出现二义性,编译器无法确定到底应该选择派生类中的哪一个成员,这种由于多继承而引起的对类的某个成员访问出现不唯一的情况就称为二义性问题。

▼二义性的解决方法

•解决方法一:用类名来限定,通过类的作用域分辨符明确限定出现歧义的成员是继承自哪一个基类。

•解决方法二:同名覆盖,在派生类中新增一个与基类中成员相同的成员,由于同名覆盖,程序将自动选择派生类新增的成员。

④ 虚基类

为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避免了数据不一致的问题。

•虚基类的定义

虚基类的定义是在融合在派生类的定义过程中的,其定义格式如下:class 派生类名:virtual 继承方式 基类名

相关文章

  • C++派生类

    派生类的概念和定义 ① 定义格式 派生类定义的语法为: class 派生类名:继承方式1 基类名1, 继承方式2 ...

  • 10 多态 抽象

    /*多态本质:c++ 允许将派生类对象的地址赋予基类的指针所有派生类的本质都是is a 的基类基类的指针调用任何方...

  • C++ 类继承

    C++类的继承要点: 派生类不能直接访问基类的私有成员变量,只能通过基类的公有或保护方法进行访问。 创建派生类对象...

  • C++派生类中调用基类成员函数和构造函数

    C++的派生类中,可以使用基类命名空间,调用基类的成员函数和成员变量,如下所示。 假设这样一个情况,我们在派生类的...

  • c++多态实现的机制

    什么是c++的多态? 多态的意思是,当有基类和派生类的时候,在基类的函数前加上virtual关键字,在派生类中重写...

  • 12. C++多继承 二义性 虚基类

    12.1 继承 派生类都只有一个基类,称为单继承。同时C++也支持多继承,即一个派生类可以有两个或多个基类。 注意...

  • C++多态

    c++的多态总结是:当派生类被强制类型转换为基类时,派生类的虚函数表地址是不会被替换为基类的虚函数表地址的。 运行...

  • 2019-12-20C++中派生类对基类成员的访问形式及规则

    C++中派生类对基类成员的访问形式主要有以下两种: 1、内部访问:由派生类中新增成员对基类继承来的成员的访问。 2...

  • C++三种继承方式的比较

    C++访问权限控制符 : public 公有成员 基类、派生类、友元、外部都可以访问 prote...

  • C++ 派生类 小例

    注意:本文中代码均使用 Qt 开发编译环境 运行结果:B0::display()B1::display()D1::...

网友评论

    本文标题:C++派生类

    本文链接:https://www.haomeiwen.com/subject/kmneartx.html