首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++期末复习总结(2)

,公有继承的时候,我们的父类里面的公有成员还是公有成员,受保护的成员还是受保护的成员,私有成员就不存在了; 第二种是受保护的继承,这个时候,原来的公有成员就变成了受保护的成员,原来的父类里面的受保护的成员还是受保护的...,原来的私有成员变量这个时候还是不存在的; 第三种就是私有的继承,这个时候,原来的父类里面的共有的成员变量和保护的成员变量就是私有的了,原来的父类里面的受保护的成员变量也是不存在的; (2)我们在这个继承的子类里面是没有办法访问这个所谓的父类里面的私有成员变量的...,例如我们可以把这个共有的改变成为受保护的,把这个受保护的改变权限为共有的,这个父类里面的私有的成员变量的权限是没有办法通过这个关键字改变的,因为这个父类里面的私有的成员变量在这个子类里面根本就不会存在...,我们就可以把这个父类里面的公有成员变量修改为受保护的,把这个受保护的成员变量修改权限为公有的,当然也可以把他们的权限设置为私有的; 4.继承的对象模型 (1)这个地方是帮助我们了解C++继承语法的底层逻辑...,是使用基类初始化这个基类的成员变量,派生类初始化派生类的成员变量,你可能会问,这些基类的成员变量都被派生类给继承了,为什么不使用派生类初始化基类的成员变量,这个有两点原因; 第一就是我们的基类里面的私有的成员变量我们是无法在这个派生类里面看到的

5400

EasyC++85,私有继承(三)

但私有继承的方式也有一些特有的优点,比如说可以在派生类当中使用基类的保护成员,但如果是包含的话,就没办法使用这些保护成员或者方法了。另外,派生类可以重新定义虚函数,而包含类的方式不行。... { ... }; 使用保护继承时,基类的公有成员和保护成员都会成为派生类的保护成员。...和私有继承一样,基类的接口在派生类当中也是可用的,但在继承层次结构之外是不可用的。当我们从派生类继续派生出第三代类的时候,私有继承和保护继承的区别就出来了。...使用私有继承时,第三代类不能使用基类的接口,因为基类的公有方法在派生类当中变成了私有方法。而使用保护继承的话,基类的公有方法在派生类变成受保护的,所以第三代派生类依然可以使用。...假设要想让基类的方法在派生类外部可用,方法之一是单独开发一个派生类方法,在这个方法当中调用基类的方法。

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

    C++继承

    1.继承方式的区别总结 (1)继承的方式有三种,分别是公有继承,私有继承,以及受保护的继承; (2)基类的私有成员无论是是使用何种方式继承,在派生类里面和外面都是不可以进行访问的;但是如果像这个基类的公有成员被私有继承...,这个时候基类的公有成员在派生类里面就是私有的,这个私有的成员在派生类里面是可以进行访问的,但是在派生类的外面是不可以进行访问的; (3)我们的这个继承方式的组合尽管是多种多样的,但是这个经常使用的就是...,基类的私有成员在派生类里面是不可以直接访问的,但是如果我们想要这个成员在派生类里面被访问,但是在累的外面不可以访问,这个时候我们就可以把这个成员定义为受保护的成员; (5)我们在写这个派生类的时候,例如基类是...这个地方仅仅是作为一个铺垫,我们知道这个子类继承了父类的相关的成员变量和成员函数,所以构造的时候是先构造父类,再构造子类,否则子类是没有办法去继承父类的成员函数和成员变量的,而我们更清楚的就是,析构函数和构造函数的执行顺序是相反的...,只需要管好自己的成员变量就可以了,对于父类的,我们调用父类的构造函数让他自己去初始化; (3)拷贝构造函数 这个时候拷贝构造函数应该如何去写,我们的这个形参是s对象,如何把这个s对象里面属于父类的那一部分成员变量给抠出来

    6610

    cpp继承中的那些事(上)

    0x01 单继承和多继承 顾名思义,单继承就是派生类只有一个直接基类的继承方式,而多继承就是有多个直接基类的继承方式。...公有继承并不会改变基类成员的访问权限,保护继承和私有继承会把公有和受保护的访问权限分别修改为受保护的和私有的 2....return 0; } 0x03 关于继承中的重定义问题 当两个类存在继承关系时: 基类和派生类有同名成员变量或者成员函数,在派生类实例化对象的时候,访问到的是派生类自己的成员。...如果存在成员变量和成员函数同名,那么只能访问派生类的成员变量。...如果基类和派生类中存在同名的成员函数,但是参数列表不同,那么只能访问子类的成员函数 {% note info modern %}无论是函数名同名,还是变量名同名,还是函数和变量名同名,或是函数参数不一样

    43110

    C++ 类访问修饰符

    class Base { public: // 公有成员 protected: // 受保护成员 private: // 私有成员 }; 公有成员(public) 公有成员在程序中类的外部是可访问的...) 保护成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的。...下面的实例是演示私有成员变量width可被派生类smallBox的成员函数访问。...基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private private 继承:基类 public...成员 不可见 基类的非私有长远在子类的访问属性不变 protected继承 变为protected成员 变为protected成员 不可见 基类的非私有成员都为子类的保护成员 private继承 变为private

    51330

    C++ 多级继承与多重继承:代码组织与灵活性的平衡

    脆弱性: 对基类的更改可能会意外影响派生类,导致代码错误。菱形继承问题菱形继承是指一个类从两个基类继承,这两个基类又有一个共同的基类的情况。...C++ 多重继承多重继承允许一个类从多个基类继承属性和方法。这意味着派生类可以继承多个基类的功能和特性。...缺点复杂性: 多重继承会导致类层次结构变得复杂,难以理解和维护。歧义问题: 当多个基类提供相同名称或功能的成员时,可能会导致歧义问题。脆弱性: 对基类的更改可能会意外影响派生类,导致代码错误。...访问控制规则在多重继承中,访问控制规则遵循以下原则:公有继承: 派生类继承所有公有成员和受保护成员。私有继承: 派生类不能继承任何私有成员。...受保护继承: 派生类继承所有受保护成员,但这些成员在派生类中变为私有。总结多重继承是一种强大的 OOP 工具,可用于创建复杂的类层次结构。但是,它也存在一些缺点,例如复杂性和菱形继承问题。

    18010

    第十五章:C++访问控制权限、继承和多态详解

    它们定义了类成员对外暴露的程度,以下是它们的基本规则: public:公共权限,允许在类内部和外部使用。 protected:受保护的权限,允许在类内部和派生类中使用。...protected权限用于声明纯虚函数calculateArea(),这个函数必须在派生类中实现。 派生类Circle中的私有成员变量radius只允许在类内部使用。...sleep(); // 可以访问基类的受保护成员 //run(); // 无法访问基类的私有成员 } }; int main() { Dog...Dog类可以访问Animal类的公共和受保护成员(eat()和sleep()),但无法访问Animal类的私有成员(run())。...在继承中,访问控制权限决定了派生类对基类成员的访问能力。在多态中,使用基类指针或引用可以限制对对象成员的访问。

    9010

    后台开发:核心技术与应用实践 -- C++

    (受保护的),此项是可选的,如果不写此项,则默认为 private (私有的)。...基类成员在派生类中的访问属性: 公用继承(public inheritance):基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有 私有继承(private inheritance...):基类的公用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有 受保护的继承(protected inheritance):基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有...受保护成员的意思是,不能被外界引用但可以被派生类的成员引用。 综上,可以视为基类访问权限与派生类继承方式的叠加最小访问权限。...在派生时,派生类是不能继承基类的析构函数的,也需要通过派生类的析构函数去调用基类的析构函数。

    1.3K10

    TypeScript 官方手册翻译计划【十二】:类

    根据 JavaScript 的定义,类初始化的顺序是: 初始化基类的字段 执行基类的构造器 初始化派生类的字段 执行派生类的构造器 这意味着,因为基类构造器执行的时候派生类的字段尚未进行初始化,所以基类构造器只能看到自己的...protected 受保护(protected)成员只在类的子类中可见。...公开受保护成员 派生类需要遵循其基类的约束,但可以选择公开具有更多功能的基类的子类。...跨层级访问受保护成员 对于通过一个基类引用访问受保护成员是否合法,不同的 OOP 语言之间存在争议: class Base { protected x: number = 1; } class...关于 C# 为什么会认为这段代码是不合法的,可以阅读这篇文章了解更多信息:为什么我无法在一个派生类中去访问一个受保护成员?

    2.6K10

    C++ 类的继承与派生

    公用继承 如果采用公用继承,基类中的访问属性在派生类中保持不变,即: 基类中的私有属性——派生类中私有属性 基类中的共用属性——派生类中共用属性 基类中的受保护属性——派生类中受保护属性 class...(); 私有继承 如果采用私有继承,基类中的访问属性在派生类中发生如下变化,即: 基类中的私有属性——派生类中不可访问 基类中的共用属性——派生类中私有属性 基类中的受保护属性——派生类中私有属性...但是有一点与私有成员不同:受保护成员可以被派生类的成员函数引用。...如果采用保护继承,基类中的访问属性在派生类中发生如下变化,即: 基类中的私有属性——派生类中不可访问 基类中的共用属性——派生类中受保护属性 基类中的受保护属性——派生类中受保护属性 class...,函数受保护就没有与外界的接口了,在这里仅仅作为例子) 在这个例子中,派生类Student1中的私有成员为: int age; 共有成员为: myshow1(); 受保护成员为:

    1.1K80

    C++8种常见类类型

    具体类可以在它的实现中得到优化,因为没有必要去单担心派生类中的功能性; 所以具体类是线程处理中多线程类的理想候选者,在线程化时,不必考虑派生类中出现的覆盖或者重载重要线程化成员函数。...此外,为了让一个类成为抽象类,至少需要一个纯虚函数。...2、受保护(protected) 3、公有(public) 其中: 1、当数据成员和成员函数为私有的时,它们仅仅只能被中间类的成员函数访问,无法被非该类的成员函数所访问; 2、类的成员函数和数据成员为受保护的时...,它们可以被类的中间成员和该类的所有后代所访问,但该类之外的函数无法访问 3、类可以将成员函数和数据成员声明为公有的,则不管是什么类的成员,都可以访问被定义为public的接口和成员 例如以下,这可以保护敏感函数或者变量...节点类提供了可以直接被派生类继承的受保护的数据成员和成员函数,它使用基类的指针允许在后代类中操纵成员函数,用户可以通过多态和继承来特殊化节点类。 节点类既可以是基类,也可以是派生类。

    89810

    《C++Primer》第十五章 面向对象程序设计

    首先初始化基类的部分,然后按照声明顺序依次初始化派生类的成员。 2.2 派生类使用基类的成员 派生类可以直接访问基类的公有成员和受保护成员。...受保护成员 一个protected关键字声明它希望与派生类分享但是不想被其他公共访问使用的成员: 和私有成员类似,受保护的成员对于类的用户来说不可访问 和公有成员类似,受保护的成员对派生类的成员和友元来说是可访问的...派生类的成员或者友元只能通过派生类对象来访问基类的受保护成员,派生类对于一个基类对象中的受保护成员没有任何访问特权 理解最后一条规则可以参考如下例子: class Base { protected:...clobber(Base &b) { b.port_mem = 0; } 派生类的成员和友元函数只能访问派生类对象中基类部分的受保护成员,对于普通的基类对象中的成员不具有特殊的访问权限。...公有、私有和受保护继承 某个类对继承而来的成员呢的访问权限收到两个因素影响:一个是基类中该成员的访问说明符,第二个是在派生类的派生列表中的访问说明符。

    1.2K20

    C++如何让自己变得富有?

    同样,类中成员的访问限定符也有三种: (1)public(公有成员变量)....(2)private(私有成员变量) (3)protected(保护成员变量) 继承方式与限定符 基类与派生类权限一览表 千万不要去背表格中的内容,不仅难背,还容易忘记....cout << endl; return 0; } 我们一般都使用公有继承,在公有继承下: (1)如果我们想让成员在派生类中可以访问,在类外面不可访问,此时就适合在基类中定义为protected成员...四、切片 派生类是由继承基类后,加上自己的成员构成的,那我们只取派生类中基类的那部分,将其赋值给一个基类对象,这就类似于切割或者切片....基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的。

    15010

    C++:43---派生类向基类转换、静态动态的类变量

    二、转换的本质 派生类可以转换为基类的本质是: ①为什么派生类可以转换为基类:派生类从基类而来,因此派生类中包含了基类的方法和成员。...将子类对象赋值给父类对象,相当于将子类中的父类成员变量赋值给父类 ?...三、继承方式对类型转换的影响 遵循下面3个规则: 假设B继承于A ①只有当B公有地继承A时,用户代码才能使用派生类向基类转换;如果B是受保护的/私有的继承于A,则不能使用派生类向基类转换 因为保护或者私有继承...return 0; } ③如果B继承于A的方式是公有的或者受保护的,则B的派生类的成员和友元可以使用B向A的类型转换;如果B继承于A的方式是私有的,则不能 class A{}; class B :protected.../类动态类型 在上面我们介绍过,基类的指针或引用可以指向于基类对象也可以指向于派生类对象,因此一个类可以分为是动态类型的还是静态类型的: 静态类型的类变量:在编译时就已经知道是什么类型的了 动态类型的类变量

    1.8K10

    探索CC++的奥秘之C++中的继承

    基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的。 3....实际上最常用的也就是下面这两个:  派生类成员变量由两个部分数据构成,一个是从父类继承下来的成员变量,一个是自己的成员变量。...子类析构函数完成后,自动调用父类析构,这样就保证了先子父,显示调用父类析构是没办法保证先子后父的: 为什么要先子后父?...因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序。 5. 派生类对象初始化先调用基类构造再调派生类构造。 6. 派生类对象析构清理先调用派生类析构再调基类的析构。 7....5.继承与友元 友元关系不能继承,也就是说基类的友元函数不能访问子类私有和保护成员。

    12210

    【干货】C++基础知识:继承与派生详解

    , 在Rect类中也是受保护的, 所以可以访问 // 而通过公有继承的基类私有的成员, 在派生类中是不可被访问的 void showRect() { cout 的访问级别有三种:public、protected、private 在派生类中,对于成员的访问级别有四种:public(公有)、protected(受保护)、private(私有)、inaccessible...基类的公有成员在派生类中仍然是公有的 基类的保护成员在派生类中仍然是受保护的 基类的不可访问的成员在派生类中仍然是不可访问的 基类的私有成员在派生类中变成了不可访问的 总结:在公有派生的情况下,通过派生类自己的成员函数可以访问继承过来的公有和保护成员...像这样: // 基类 class Point { // 这里声明成员属性为受保护的 protected: int x; int y; public:...(3)私有派生 通过私有派生,基类的私有和不可访问成员在派生类中是不可访问的,而公有和保护成员这里就成了派生类的私有成员。

    1.1K20

    探索C++三大特性--C++ 继承详解:从概念到高级用法

    1.2 使用继承的改进 通过继承,我们可以将公共的成员变量和函数提取到一个基类(Base Class)中,例如Person类,然后让Student和Teacher类继承Person类,从而减少重复代码。...2.2 基类成员的访问控制 在继承体系中,基类的private成员在派生类中是不可见的,这意味着派生类对象无法访问基类中的私有成员。...; class Student : public Person { public: void Print() { cout 基类的受保护成员...3.1 成员隐藏 在继承体系中,如果派生类和基类中存在同名的成员,那么基类的成员会被隐藏。...四、派生类的默认成员函数 在派生类中,默认的成员函数(如构造函数、析构函数、拷贝构造函数、赋值运算符等)会自动生成,并且派生类会调用基类的相应成员函数来初始化基类部分。

    39210

    C#学习笔记(四)

    只有string和object简单类型是引用类型,但是数组也是隐式的引用类型。 8. 类的修饰符 image.png 9. 接口和抽象类的相似之处:     它们都包含可以由派生类继承的成员。...接口和抽象类都不能直接抽象化,但可以声明这些类型的变量。如果这样做,就可以使用多态性把继承这两种类型的对象指定给它们的变量。接着通过这些变量来使用这些类型的成员,但不能直接访问派生类对象的其他成员。...接口和抽象类的区别:       派生类只能继承一个基类,即只能继承一个抽象类(但可以用一个继承链包含多个抽象类)。相反,类可以使用多个接口。但这不会产生太大的区别--这两种情况取得的效果是类似的。...抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本身必须也是抽象的)和非抽象成员(它们拥有代码体,也可以是虚拟的,这样就可以在派生类中重写)。...另外,按照定义,接口成员是公共的(因为它们倾向于在外使用),但抽象类的成员可以是私有的(只要它们不是抽象的)、受保护的、内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)

    42820

    C++中派生类成员的访问属性

    以下是摘自谭浩强《C++面向对象程序设计》一书中的内容: 在派生类中,对基类的继承方式可以有public(公用的)、private (私有的)和protected(保护的)3种。...不同的继承方式决定了基类成员在派生类中的访问属性。...简单地说: (1)  公用继承(public inheritance) 基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。...(2)  私有继承(private inheritance) 基类的公用成员和保护成员在派生类中成了私有成员。其私有成员仍为基类私有。...(3)  受保护的继承(protected inheritance) 基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。

    1.1K40

    C++之虚函数的作用和使用方法

    (int, string,float); //声明构造函数 void display( );//声明输出函数 protected: //受保护成员,派生类可以访问 int num;...每个派生类都有同名函数display,在程序中要调用同一类族中不同类的同名函数,就要定义多个指向各派生类的指针变量。...这两种办法都不方便,它要求在调用不同派生类的同名函数时采用不同的调用方式,正如同前面所说的那样,到不同的目的地要乘坐指定的不同的公交车,一一 对应,不能搞错。...如果在派生类中没有对基类的虚函数重新定义,则派生类简单地继承其直接基类的虚函数。 定义一个指向基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象。...通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。 通过虚函数与指向基类对象的指针变量的配合使用,就能方便地调用同一类族中不同类的同名函数,只要先用基类指针指向即可。

    1.4K80
    领券