展开

关键词

C++继承

; 在c++中将继承的一方称作派生类或者子类,将被继承的一方叫做基类或者父类继承的基本格式如下(CB 继承CA): class CA { public: CA(); ~CA(); } :共有继承、私有继承以及保护继承继承的方式不同,派生类对于基类的各种不同属性之间成员的访问权限不同,下面再给出一个表格用以说明这个问题: 通过这个表我们可以总结出一下几点: 1)私有成员在任何情况下都不能被派生类访问 ; 2)公有继承下其他基类成员在派生类中的访问属性不变; 3)私有继承下其他基类成员在派生类中全部变为私有; 4)保护继承下其他类成员在派生类中全部变为保护属性; 从这个表中我们可以看出,私有继承与保护继承对于基类的访问属性完全相同 保护成员的访问情况与私有相同,即类的保护成员在类内可以访问在类外不能访问,它们二者的区别在这个表中确实没有体现出来,主要的区别可以在下一层的继承中体现比如有三个类继承关系为CC->CB->CA,继承类型分别为 ,我们知道基类的非私有成员在保护继承下公有的变为保护,保护的仍然为保护,而私有继承则是将所有都变为私有,他们之间如果都是保护继承的方式,那么CA中的其他成员在CB中都变为保护类型那么在CC中仍然能够访问到

23520

c++继承

面向对象程序设计中最重要的一个概念是继承继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。 继承类型 当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符 access-specifier 来指定的。 我们几乎不使用 protected 或 private 继承,通常使用 public 继承。 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。 多继承继承即一个子类可以有多个父类,它继承了多个父类的特性。 C++ 类可以从多个类继承成员,语法如下: class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,… { <派生类类体> }; 其中,访问修饰符继承方式是 public、protected

7710
  • 广告
    关闭

    开发者专享福利,1988元优惠券限量发放

    带你体验博客、网盘相册搭建部署、视频渲染、模型训练及语音、文字识别等热门场景。云服务器低至65元/年,GPU15元起

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++继承

    继承访问权限 父类public 父类protect 父类private public继承 public protect --- protect继承 protect protect --- private 继承 private private --- 先看继承的权限关键字,再看父类的成员变量声明关键字。 构造函数执行顺序 调用父类构造方法 调用组合类构造方法 调用本身的构造方法 析构函数执行顺序 与构造函数执行顺序相反 继承中同名成员变量 class A中有x ;class B集成A,同时也有x。 静态成员变量 遵循集成规则 使用前必须先定义 多继承产生的成员变量多义性 多个继承继承自同一个祖先类,祖先类中的成员变量使用会产生二义性。如下: ? 多个继承类中有同名的成员变量 ? 2.png

    16240

    C++继承

    Contents 1 基本概念 2 访问控制和继承 3 继承类型 4 多继承 5 参考资料 基本概念 面向对象程序设计一个重要的概念就是继承继承允许我们依据另一个类来定义一个类。 继承类型 派生类可以有public、protected 或 private 几种类型。 protected Shape; 我们几乎不使用 protected 或 private 继承,通常使用 public 继承。 当使用不同类型的继承时,遵循以下几个规则: 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。 多继承继承即一个子类可以有多个父类,继承了多个父类的成员变量和函数。

    8520

    C++继承相关问题——菱形继承&继承

    什么是菱形继承?菱形继承的问题是什么? 菱形继承:菱形继承是多继承一种特殊的继承方式。如下如所示为一菱形继承 ? 即两个派生类继承同一个基类,同时两个派生类又作为基本继承给同一个派生类。 这种继承形如菱形,故又称为菱形继承。 菱形继承的问题:菱形继承主要有数据冗余和二义性的问题。 什么是菱形虚拟继承?如何解决数据冗余和二义性的? 虚拟继承可以解决菱形继承的二义性和数据冗余的问题。如上面的继承关系,在Student和Teacher的继承Person时使用虚拟继承,即可解决问题。 继承和组合的区别?什么时候用继承?什么时候用组合? public继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。 组合是一种has-a的关系。 不过继承也有用武之地的,有些关系就适合继承那就用继承,另外要实现多态,也必须要继承。类之间的关系可以用继承,可以用组合,就 用组合。

    3.2K20

    C++基础-继承

    本文为 C++ 学习笔记,参考《Sams Teach Yourself C++ in One Hour a Day》第 8 版、《C++ Primer》第 5 版、《代码大全》第 2 版。 继承的目的在于,通过“定义能为两个或更多个派生类提供共有元素的基类”的方式写出更精简的代码。 1. 继承基础 本节以公有继承为例,说明继承中的基础知识。 访问限定符出现在两种场合:一个是类的成员的访问权限,类有公有成员、保护成员和私有成员;一个是类的继承方式,继承方式有公有继承、保护继承和私有继承三种。 参《C++ 多态》笔记第 1 节。 3.3 赋值关系 如下三条关系的根本原因在 3.1 节中已讲述。 派生类对象可以赋值给基类对象,反之则不行。 因为派生类对象数据成员比基类对象数据成员多。 多继承 派生类继承多个基类的特征称作多继承。如对鸭嘴兽来说。鸭嘴兽具备哺乳动物、鸟类和爬行动物的特征,那么鸭嘴兽可以继承哺乳动物、鸟类和爬行动物这三个基类。

    27120

    C++继承分析

    面向对象的三大特性之一就是继承继承运行我么重用基类中已经存在的内容,这样就简化了代码的编写工作。 ,一下的内容都是采用的共有继承C++中的函数符号名称与C中的有很大的不同,编译器根据这个符号名称可以知道这个函数的形参列表,和作用范围,所以在继承的情况下,父类的成员函数的作用范围在父类中,而派生类则包含了父类的成员,所以自然包含了父类的作用范围 多重继承 多重继承的情况与单继承的情况类似,只是其父类变为多个,首先来分析多重继承的内存分布情况 class CParent1 { public: virtual void fnc1(){ 菱形继承 菱形继承是最为复杂的一种继承方式,它结合了单继承和多继承 class CGrand { public: virtual void func1(){ printf("CGrand

    28530

    C++之多继承

    C++支持多继承,其它的面向对象编程语言几乎都不支持多继承。而多继承一旦使用不当就会造成二义性。这可能就是其它语言都不支持多继承的原因。实际来看,几乎没有使用多继承的必要性。 下面来段代码展示一下多继承和二义性。 { }; Last类继承自C1和C2类。 C1和C2都是继承自MyClass类。 L.C1::a; L.C2::b; 基于此,C++设计了虚继承来解决上述问题的出现。

    20410

    C++ 虚拟继承

    1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继 承自类A,因此在类D中两次出现类A中的变量和函数。 ,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用,而一旦离开了多重继承,虚拟继承就完全失去了存在的必要因为这样只会降低效率和占用更多的空间。 为什么需要虚继承? 由于C++支持多重继承,那么在这种情况下会出现重复的基类这种情况,也就是说可能出现将一个类两次作为基类的可能性。比如像下面的情况 ? 虚拟继承与普通继承不同的是,虚拟继承可以防止出现diamond继承时,一个派生类中同时出现了两个基类的子对象。也就是说,为了保证 这一点,在虚拟继承情况下,基类子对象的布局是不同于普通继承的。 3.笔试,面试中常考的C++虚拟继承的知识点 第一种情况:         第二种情况:          第三种情况            第四种情况: class a           class

    1.3K80

    C++:13---继承(单一继承、多重继承、多级继承、菱形继承、虚继承

    ; ③一个类不能派生其自身,原因和②是相同的 三、继承的基本特点 ①一个类可以被多个类继承 ②一个类也可以继承于多个类 四、单一继承 一个类只继承于一个类叫做单一继承 class A { }; class B :public A //单一继承 { }; 五、多重继承 一个类只继承于多个类叫做多重继承 class A{}; class B {}; class C :public B, public A //多重继承 { }; 六、多级继承 一个子类还可以作为另一个类的父类而派生出另一个子类。 最后一个类D又继承于B和C,这样形式的继承称为菱形继承 菱形继承的缺点: 数据冗余:在D中会保存两份A的内容 访问不明确(二义性):因为D不知道是以B为中介去访问A还是以C为中介去访问A,因此在访问某些成员的时候会发生二义性 虚继承的作用:为了保证公共继承对象在创建时只保存一分实例 虚继承解决了菱形继承的两个问题: 数据冗余:顶级基类在整个体系中只保存了一份实例 访问不明确(二义性):可以不通过作用域访问符::来调用(原理就是因为顶级基类在整个体系中只保存了一份实例

    1.1K30

    c++继承

    前提概念: 多重继承:比如类a继承类b,类b继承类c,这类关系称为多重继承继承:比如类a继承类b和类c,这类关系称为多继承 典型问题: 例如: 农民类和工人类继承自人类,农民工类继承自农民类和工人类 这种菱形的继承将为带来农民工类中将有两份人类中的成员,导致数据冗余。 解决方案——虚继承: 关键字:virtual class people; class farmer:virtual public people; class worker:virtual public

    44770

    C++继承

    派生类构造函数的调用 构造函数是用来初始化类的数据成员,它不被子类继承。在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。

    16920

    c++继承

    java相关视频" << endl; } }; class Cpp :public BasePage { public: void content() { cout << "c+ 继承方式有: 公共继承:子类所有属性和方法和修饰符和父类中保持一致; 保护继承:子类所有属性和方法为protected; 私有继承:子类所有属性和方法为private; 继承对象模型: #include 我们发现父类的所有属性都被继承了,但是private类型的属性在子类中却不能被访问。 继承中构造和析构顺序:父类构造、子类构造、子类析构、父类析构。 继承中同名静态成员处理:与同名成员处理一致,只不过通过类名直接访问而不是对象访问时需要加各自的作用域,即 Base::a; Son::a; Son::Base::a; 多继承语法:c++可以有多重继承。 class A:public B ,public C{}; 菱形继承:两个子类同时继承一个基类;又有某个类同时继承这两个子类; 存在两个问题: 同名成员:利用作用域区分访问即可 最后一个类继承了两份基类的数据

    12710

    C++继承#1

    如何继承 我们在这里简单介绍继承的方法,现有一学生类,但现在我们需要增加一个硕士研究生类,显然,硕士是属于学生这个基类的,所以我们用继承的方法来创建研究生类,参考以下程序片段 class student :继承类型 要继承的父类 即可,关于继承类型,将在后面的内容详细说明。 basic{//保护继承 //.. }; class pri:private basic{//私有继承 //.. }; 公共继承继承父类的一切,但基类的 private 成员不能访问, 保护继承意味着外界不能访问基类中的任何成员,但可以通过派生类中的自身公有成员函数访问继承出的保护成员; 私有继承同样也意味着外界不能访问基类中的任何成员,但可以通过派生类中的自身公有成员函数访问继承出的私有成员 保护继承与私有继承类似,私有继承会影响下一次的继承,因为 private 成员是不能被派生类访问的。 调整访问控制 在派生类中,可以调整成员的访问控制属性,将公有调整为私有,保护调整为公有等等操作。

    13720

    C++继承中的多继承语法与菱形继承

    继承语法 C++允许一个类继承多个类 语法: class 子类 :继承方式 父类1 , 继承方式 父类2... 多继承可能会引发父类中有同名成员出现,需要加作用域区分 C++实际开发中不建议用多继承 示例: class Base1 { public: Base1() { m_A = 100; } public ,子类使用时候要加作用域 菱形继承 菱形继承概念: ​ 两个派生类继承同一个基类 ​ 又有某个类同时继承者两个派生类 ​ 这种继承被称为菱形继承,或者钻石继承 典型的菱形继承案例: 菱形继承问题: 羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性。 使用了虚继承后对比未使用虚继承解决菱形继承 总结: 菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义 利用虚继承可以解决菱形继承问题

    5510

    C++:37---继承概念、继承种类

    这篇文章不详细分析继承和不同继承关系下的特点。 我将在后边几篇文章里专门针对继承关系来做分析。 ③一个类不能派生其自身,原因和②是相同的 三、继承的基本特点 ①一个类可以被多个类继承 ②一个类也可以继承于多个类 四、单一继承 一个类只继承于一个类叫做单一继承 class A { }; class B :public A //单一继承 { }; 五、多重继承 一个类只继承于多个类叫做多重继承 class A{}; class B {}; class C :public B, public A // 多重继承{ }; 六、多级继承 一个子类还可以作为另一个类的父类而派生出另一个子类。 最后一个类D又继承于B和C,这样形式的继承称为菱形继承 菱形继承的缺点: 数据冗余:在D中会保存两份A的内容 访问不明确(二义性):因为D不知道是以B为中介去访问A还是以C为中介去访问A,因此在访问某些成员的时候会发生二义性

    17920

    C++:53---菱形继承、虚继承

    一、菱形继承 在介绍虚继承之前介绍一下菱形继承 概念:A作为基类,B和C都继承与A。 最后一个类D又继承于B和C,这样形式的继承称为菱形继承 菱形继承的缺点: 数据冗余:在D中会保存两份A的内容 访问不明确(二义性):因为D不知道是以B为中介去访问A还是以C为中介去访问A,因此在访问某些成员的时候会发生二义性 虚继承的作用:为了保证公共继承对象在创建时只保存一分实例 虚继承解决了菱形继承的两个问题: 数据冗余:顶级基类在整个体系中只保存了一份实例 访问不明确(二义性):可以不通过作用域访问符::来调用(原理就是因为顶级基类在整个体系中只保存了一份实例 {}; 三、虚继承中的类型转换 虚继承中也可以将派生类抓换为基类,用基类的指针/引用指向于派生类 菱形继承中的类型转换 菱形继承中会发生错误,不能将派生类转换为基类 原理是差不多的,就是因为派生类中拥有多份基类的实体 解决二义性最好的办法就是在派生类为成员自定义新的实例 五、虚继承的构造函数 虚继承中的构造函数与普通继承的构造函数不一样: 普通继承:派生类可以不为间接基类(基类的基类)进行构造函数的调用 虚继承:不论派生类属于哪一层

    22930

    C++打怪 之 C++继承

    注:C++继承类似于C语言中的结构体与结构体变量的关系:在C语言中,首先建立结构体以及其内部的结构体成员,然后以此结构体作为数据类型定义若干个结构体变量。 其中派生类可以源于一个或多个基类,即可以继承多个基类。 继承类型 当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符 access-specifier 来指定的。 在实际编程中很少用到protected 或 private 继承,通常使用 public 继承。 私有继承(private): 当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。 多继承 在上面也讲到一个类可以派生自多个基类,即多继承。派生类具备了所继承的多个基类的特性。

    21730

    c++多重继承小结

    如果一个类从两个不同的类里继承两个同名的成员,则需要在派生类中使用类限定符来区分他们。 即在从A和B派生出来的c类中使用a::Show()和B::Show()来区分从这两个类那里继承的show()方法 如果一个类通过多种途径继承了一个非虚基类,则该类从每种途径分别继承非虚基类的一个实例。 使用虚基类的MI,当派生类使用关键字virtual来指示派生时,基类就成为虚基类: class A:public virtual B {} 主要变化是,从虚基类的一个或多个实例派生而来的类将只继承了一个基类 MI会增加编程的复杂程度,然而这种复杂性主要是由于派生类通过多条途径继承同一个基类引起的。 q) { cout<<"C"<<endl<<" int c="<<c<<endl; };*/ //上边将通过两种不同的途径把a传递给A这会有二义性 //<em>c+</em>

    28170

    C++基础(四).继承

    前言 C++语言是C语言的拓展,C语言是面向过程的,C++在C的基础上增加了面向对象的方法 什么是面向对象呢,面向对象就是将数据和对数据的加工方法打包在一起,进行模块化的调用,通过方法来进行数据交换的一种设计方法 Tip: 本人关于程序的认知,可以参看前面写的 一个运维人员的编程思维 面向对象的程序设计有四个主要特点: 抽象 封装 继承 多态 下面就通过C++来对面向对象的核心特性进行分享 ---- 概要 -- -- 继承 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法 对象的一个新类可以从现有的类中派生,这个过程称为类继承。 新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类) 派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 /c++$ .

    16120

    相关产品

    • 集团账号管理

      集团账号管理

      腾讯云集团账号管理为集团管理员提供统一管理多个云账号的解决方案。通过集团账号管理,您可以创建集团组织,通过邀请或创建的方式将您的云账号统一加入到组织中管理,并根据需要为账号设置财务管理策略,共享资源,管理日志等。通过这些功能,能够更好地满足企业的预算、安全性和合规性需求。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券