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

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

第十五章:C++访问控制权限、继承和多态详解 1. 概述 C++中的访问控制权限是面向对象编程的重要概念之一。通过访问控制权限,我们可以限制类成员的访问范围,以保护数据的安全性和封装性。...sleep(); // 可以访问基类的受保护成员 //run(); // 无法访问基类的私有成员 } }; int main() { Dog...Dog类可以访问Animal类的公共和受保护成员(eat()和sleep()),但无法访问Animal类的私有成员(run())。...总结 本文详细介绍了C++中的访问控制权限,以及在继承和多态中的应用。通过设置不同的访问权限,可以限制类成员的访问范围,保护数据的安全性和封装性。...在继承中,访问控制权限决定了派生类对基类成员的访问能力。在多态中,使用基类指针或引用可以限制对对象成员的访问。

9010

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

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

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

    C++ 类的继承与派生

    3.类的继承方式包括:public(公用继承),private(私有继承),protected(受保护的),而不同的继承方式将影响派生类成员的访问属性。...公用继承 如果采用公用继承,基类中的访问属性在派生类中保持不变,即: 基类中的私有属性——派生类中私有属性 基类中的共用属性——派生类中共用属性 基类中的受保护属性——派生类中受保护属性 class...(); 私有继承 如果采用私有继承,基类中的访问属性在派生类中发生如下变化,即: 基类中的私有属性——派生类中不可访问 基类中的共用属性——派生类中私有属性 基类中的受保护属性——派生类中私有属性...如果采用保护继承,基类中的访问属性在派生类中发生如下变化,即: 基类中的私有属性——派生类中不可访问 基类中的共用属性——派生类中受保护属性 基类中的受保护属性——派生类中受保护属性 class...,函数受保护就没有与外界的接口了,在这里仅仅作为例子) 在这个例子中,派生类Student1中的私有成员为: int age; 共有成员为: myshow1(); 受保护成员为:

    1.1K80

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

    , 在Rect类中也是受保护的, 所以可以访问 // 而通过公有继承的基类私有的成员, 在派生类中是不可被访问的 void showRect() { cout 类中,对于成员的访问级别有三种:public、protected、private 在派生类中,对于成员的访问级别有四种:public(公有)、protected(受保护)、private(私有)、...基类的公有成员在派生类中仍然是公有的 基类的保护成员在派生类中仍然是受保护的 基类的不可访问的成员在派生类中仍然是不可访问的 基类的私有成员在派生类中变成了不可访问的 总结:在公有派生的情况下,通过派生类自己的成员函数可以访问继承过来的公有和保护成员...(3)私有派生 通过私有派生,基类的私有和不可访问成员在派生类中是不可访问的,而公有和保护成员这里就成了派生类的私有成员。...限制了数据成员和成员函数的访问权限,因此在实际中保护派生用得也不多。 比如:我们在上个例子中,Rect类保护派生于Point,则在Test类中Point::show();就可以使用啦!

    1.2K20

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

    二、转换的本质 派生类可以转换为基类的本质是: ①为什么派生类可以转换为基类:派生类从基类而来,因此派生类中包含了基类的方法和成员。...三、继承方式对类型转换的影响 遵循下面3个规则: 假设B继承于A ①只有当B公有地继承A时,用户代码才能使用派生类向基类转换;如果B是受保护的/私有的继承于A,则不能使用派生类向基类转换 因为保护或者私有继承...,因为为保护继承 return 0; } ③如果B继承于A的方式是公有的或者受保护的,则B的派生类的成员和友元可以使用B向A的类型转换;如果B继承于A的方式是私有的,则不能 class A{}; class...,那么调用的时候也取决于左边的类型 转换之后,基类只能通过派生类访问属于自己(基类)的那一部分,而不能访问属于派生类的数据成员(见下面演示案例③) 虚函数的调用是个例外:虚函数的调用是取决于指针或引用所指向的类型...//错误,num属于B,而A内不含有此成员 return 0; } 七、其他情境下的类型转换 当我们用一个派生类对象为一个基类对象初始化或赋值时,只有该派生类对象中的基类部分会被拷贝、移动或赋值

    1.8K10

    《挑战30天C++入门极限》C++类的继承与多重继承的访问控制

    C++类的继承与多重继承的访问控制   在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论...,派生类不能访问基类的私有成员 } }; class ControlProtectedClass:public ProtectedClass//以public方式继承ProtectedClass...,基类私有成员对文件区域与派生类区域都是不可访问的 } }; class ControlPrivateClass:public PrivateClass//以public方式继承...,派生类不能操作基类的私有成员 } }; class ControlPublicClass:public PublicClass//以public方式继承PublicClass...、保护继承与私有继承的区别与特点已经了解,最后再提醒一下读者,在继承关系中,基类的private成员不但对应用程序隐藏,即使是派生类也是隐藏不可访问的,而基类的保护成员只对应用程序隐藏,对于派生类来说是不隐藏的

    53910

    cpp继承中的那些事(上)

    公有继承并不会改变基类成员的访问权限,保护继承和私有继承会把公有和受保护的访问权限分别修改为受保护的和私有的 2....//私有继承下,原公有或者保护的成员, //都在子类中变为了私有成员,再往下继承,就会不可访问 //保护继承下,原公有或者保护的成员, //在子类中都是保护数据,再往下继承,还能在类内继续访问...return 0; } 0x03 关于继承中的重定义问题 当两个类存在继承关系时: 基类和派生类有同名成员变量或者成员函数,在派生类实例化对象的时候,访问到的是派生类自己的成员。...如果基类和派生类中存在同名的成员函数,但是参数列表不同,那么只能访问子类的成员函数 {% note info modern %}无论是函数名同名,还是变量名同名,还是函数和变量名同名,或是函数参数不一样...,都会发生重定义,基类中的标识符都会被隐藏,只能访问派生类自己的成员,如果想要使用基类中的同名成员,那么需要使用域作用符来指定作用域。

    43110

    C++一分钟之-成员访问控制:public, private, protected

    用途:通常用于类的接口部分,如成员函数和需要外部直接操作的数据成员。 private(私有) 含义:私有的,仅在类内部可访问。 用途:隐藏实现细节,保护数据安全,实现封装。...protected(受保护) 含义:介于public和private之间,基类的protected成员在派生类中可访问,但外界无法直接访问。...忽视继承中的访问权限变化 问题:错误地认为基类的protected或private成员在派生类中会变为public。...避免:了解并牢记继承中访问权限的规则,private成员在派生类中仍然是不可访问的,而protected成员在派生类中变为可访问。 3....(); // 通过基类的public函数间接访问protected成员 return 0; } 小结 成员访问控制是C++面向对象编程中维护数据安全和实现封装的重要机制。

    66210

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

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

    18010

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

    基类成员在派生类中的访问属性: 公用继承(public inheritance):基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有 私有继承(private inheritance...):基类的公用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有 受保护的继承(protected inheritance):基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有...受保护成员的意思是,不能被外界引用但可以被派生类的成员引用。 综上,可以视为基类访问权限与派生类继承方式的叠加最小访问权限。...同时,无论哪一种继承方式,在派生类中是不能访问基类的私有 成员的,私有成员只能被本类的成员函数所访问,毕竟派生类与基类不是同一个类 构造派生类的对象时,必须对基类数据成员、新增数据成员和成员对象的数据成员进行初始化...(自左向右),而与在派生类构造函数的成员初始化列表中给出的顺序无关。

    1.3K10

    C++ 类访问修饰符

    Contents 1 公有成员(public) 2 私有成员(private) 3 保护成员(protected) 4 继承中的特点 5 参考资料 数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员...class Base { public: // 公有成员 protected: // 受保护成员 private: // 私有成员 }; 公有成员(public) 公有成员在程序中类的外部是可访问的...基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:protected, protected, private private 继承:基类 public...(类内)和友元访问,不能被派生类访问; protected 成员可以被派生类访问。...成员 不可见 基类的非私有长远在子类的访问属性不变 protected继承 变为protected成员 变为protected成员 不可见 基类的非私有成员都为子类的保护成员 private继承 变为private

    51330

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

    ,公有继承的时候,我们的父类里面的公有成员还是公有成员,受保护的成员还是受保护的成员,私有成员就不存在了; 第二种是受保护的继承,这个时候,原来的公有成员就变成了受保护的成员,原来的父类里面的受保护的成员还是受保护的...,原来的私有成员变量这个时候还是不存在的; 第三种就是私有的继承,这个时候,原来的父类里面的共有的成员变量和保护的成员变量就是私有的了,原来的父类里面的受保护的成员变量也是不存在的; (2)我们在这个继承的子类里面是没有办法访问这个所谓的父类里面的私有成员变量的...,例如我们可以把这个共有的改变成为受保护的,把这个受保护的改变权限为共有的,这个父类里面的私有的成员变量的权限是没有办法通过这个关键字改变的,因为这个父类里面的私有的成员变量在这个子类里面根本就不会存在...,我们就可以把这个父类里面的公有成员变量修改为受保护的,把这个受保护的成员变量修改权限为公有的,当然也可以把他们的权限设置为私有的; 4.继承的对象模型 (1)这个地方是帮助我们了解C++继承语法的底层逻辑...,在基类和派生类的构造函数里面,this指针是相同的地址,派生类和基类都有的成员变量的地址也是一样的; (5)在C++里面这个成员变量的访问权限只是语法上面的限制,我们可以使用memset函数清零数据,

    5400

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

    通常情况下,最好将索引数据存储在另一个位置,而不是类实例本身。 类继承 和其它面向对象语言一样,JavaScript 中的类可以继承自基类。...protected 受保护(protected)成员只在类的子类中可见。...公开受保护成员 派生类需要遵循其基类的约束,但可以选择公开具有更多功能的基类的子类。...跨层级访问受保护成员 对于通过一个基类引用访问受保护成员是否合法,不同的 OOP 语言之间存在争议: class Base { protected x: number = 1; } class...关于 C# 为什么会认为这段代码是不合法的,可以阅读这篇文章了解更多信息:为什么我无法在一个派生类中去访问一个受保护成员?

    2.6K10

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

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

    1.1K40

    第 15 章 面向对象程序设计

    ---- 15.5 访问控制与继承 派生类的成员和友元只能访问派生类对象中的基类部分的受保护成员,对于普通的基类对象中的成员不具有特殊的访问权限,即在派生类中也不能通过基类对象来访问基类的 protected...假定 D继承自 B: 只有当 D公有地继承 B时,用户代码才能使用派生类向基类的类型转换;如果 D继承 B的方式是受保护的或私有的,则用户代码不能使用该转换。...如果 D继承 B的方式是公有或受保护的,则 D的派生类的成员和友元可使用 D向 B的类型转换;反之,如果 D继承 B的方式是私有的,则不能使用。 就像友元关系不能传递一样,友元关系同样也不能继承。...基类的友元在访问派生类成员时不具特殊性,类似的,派生类的友元也不能随意访问基类的成员。但是基类的友元是可以访问内嵌在派生类对象中的基类成员。...只对基类部分进行初始化,派生类自己的数据成员将会默认初始化。

    1K30

    2W五千字的C++基础知识整理汇总

    因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。...当使用不同类型的继承时,遵循以下几个规则: 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问...,但是可以通过调用基类的公有和保护成员来访问。...保护继承(protected):当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。...纯虚函数 大家可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是大家在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。

    2.6K10

    C++面试知识总结

    多态:通过继承同一个基类,产生了相关的不同的派生类,与基类中同名的成员函数在不同的派生类中会有不同的实现,也就是说:一个接口、多种方法。...  3.8 析构函数的特点 函数名称固定:~类名( ) 没有返回类型,没有参数 不可以重载,一般由系统自动的调用 3.8 公有继承、私有继承、受保护的继承 公有继承时,派生类对象可以访问基类中的公有成员...,派生类的成员函数可以访问基类中的公有和受保护成员;公有继承时基类受保护的成员,可以通过派生类对象访问但不能修改。...私有继承时,基类的成员只能被直接派生类的成员访问,无法再往下继承。 受保护继承时,基类的成员也只被直接派生类的成员访问,无法再往下继承。...一个基类的引用可以指向它的派生类实例。 3.12 static成员变量和static成员函数 static数据成员独立于该类的任意对象而存在。

    1.8K41

    一文让你学完C++,干货收藏!!!

    因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。...当使用不同类型的继承时,遵循以下几个规则: 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问...,但是可以通过调用基类的公有和保护成员来访问。...保护继承(protected):当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。...纯虚函数 大家可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是大家在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。

    3.4K20

    C++继承

    ,而对于析构的调用顺序正好相反,先调用派生类在调用基类: 对于继承来说有三种:共有继承、私有继承以及保护继承,继承的方式不同,派生类对于基类的各种不同属性之间成员的访问权限不同,下面再给出一个表格用以说明这个问题...: 通过这个表我们可以总结出一下几点: 1)私有成员在任何情况下都不能被派生类访问; 2)公有继承下其他基类成员在派生类中的访问属性不变; 3)私有继承下其他基类成员在派生类中全部变为私有; 4)保护继承下其他类成员在派生类中全部变为保护属性...保护成员的访问情况与私有相同,即类的保护成员在类内可以访问在类外不能访问,它们二者的区别在这个表中确实没有体现出来,主要的区别可以在下一层的继承中体现比如有三个类继承关系为CC->CB->CA,继承类型分别为...,我们知道基类的非私有成员在保护继承下公有的变为保护,保护的仍然为保护,而私有继承则是将所有都变为私有,他们之间如果都是保护继承的方式,那么CA中的其他成员在CB中都变为保护类型那么在CC中仍然能够访问到...CA的成员;当他们之间都是以私有继承的方式,那么CA中的成员在CB中都为私有,在CC中就不能访问CA中的成员,所以在一般情况下,我们将基类的数据成员声明为保护类型,这样既起到了封装的作用,又方便派生类的访问

    60420

    【c++】继承学习(一):继承机制与基类派生类转换

    它是继承关系中处于较高层次的类,其特性(属性和方法)可以传递到派生的类中。其他从父类继承的类会自动获得父类定义的所有公共和受保护的成员。 子类/ 派生类: 子类是从一个或多个父类继承特性的类。...这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它 我们前面知道,类里面可以访问它的成员,但是private继承下,子类是无法访问父类的成员的...private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。...,以及如何在派生类中访问基类的被隐藏成员的概念。...如果在派生类中尝试访问一个被隐藏的基类成员,需要显式地使用类名限定符来指定基类的成员。在 Print 方法中使用 Person::_num 来访问基类 Person 中的 _num 成员。

    37910
    领券