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

【C++】继承 ② ( 继承语法 | 三种继承 - 共有继承 保护继承 私有继承 | 继承与父类私有成员 | 子类访问父类私有成员 | 代码示例 )

保护成员 , 只能在类内部 或 子类 访问它们 ; Child 类不能继承 Parent 类的私有成员 ; private : 私有继承 Child 类继承了 Parent 类的所有公有和保护成员..., 这些成员会被声明为私有的 , 只能在类内部访问它们 ; Child 类不能继承 Parent 类的私有成员 ; 3、继承与父类私有成员 C++ 的 三种继承 公有继承 public 保护继承 protected...只能在 父类 , 由父类自己的成员访问 ; 除 父类 之外的任何类 , 包括子类 , 都不能访问 父类的 私有成员 , 这是为了保护 类的 封装性 和 安全性 而制定的规则 ; 4、子类访问父类私有成员...子类 不能直接访问 父类的 私有成员 , 但是可以通过在 父类 中提供 公有 或 保护 的 成员函数 来访问这些私有成员 ; 这些成员函数可以在子类重写或复用 , 以便让子类能够访问和操作基类的私有成员...; 如果在 子类 尝试访问 父类 的 私有成员 , 会报如下错误 : Test.cpp(34,1): error C2248: “Parent::privateFun”: 无法访问 private

85810

EasyC++84,私有继承(二)

这是EasyC++系列的第84篇,来聊聊私有继承私有继承(二) 我们继续来看私有继承。 访问基类方法 我们知道,在私有继承时,基类的公有对象以及保护对象会变成派生类的私有对象。...我们可以在派生类方法当中使用它,但无法通过派生类对象直接调用,但无法访问基类的私有方法和对象。 这个概念我们很好理解,但具体到实现上,我们如何在派生类的方法当中调用基类的公有或者保护方法呢?...由于Student类只是继承了string类并没有自己的string实例,因此我们需要返回基类对象本身。 同样,我们怎么操作呢? 答案是使用强制转换。...引用不会自动发生转换,是因为在私有继承当中,在不进行显式类型转换的情况下,不能将派生类的引用或指针赋给基类的引用或指针。 那么问题来了,如果我们使用的是公有继承,那么是不是就可以了呢?...其次由于C++支持多继承,所以编译器将会无法确定转换成哪个基类的类型。因此还是需要我们手动进行强制类型转换。

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

    EasyC++83,私有继承(一)

    这是EasyC++系列的第83篇,来聊聊私有继承私有继承 我们可以将一个类作为另外一个类的成员,这样可以描述has-a的关系,即包含关系。...这里的valarray是C++的一个模板类,它可以理解成一个泛型的数组,有些类似于vector和array,但提供的功能更多。比如拥有min, size, max, sum等方法。...除了使用成员变量来描述has-a关系之外,我们还可以使用私有继承。 在私有继承当中,基类的公有成员和保护成员都会成为派生类的私有成员。...语法 首先我们来看看私有继承的语法,其实和共有继承类似,只不过将public关键字替换为private,另外由于继承关系默认为private,所以也可以不填。...我们的构造函数签名可以这么写: Student(const string& n, const double *pd, int n): name(n), scores(pd, n) {} 但我们这个例子当中用的是私有继承

    26410

    C++基类私有成员会被继承

    1.派生类间接访问基类私有成员 在类的继承,类的私有成员在派生类是“不可见“的,这种”不可见“是指在派生类的成员函数,或者通过派生类的对象(指针,引用)不能直接访问它们。...()就可以简介访问基类A私有成员。...2.私有成员会被继承吗 如果基类并没有提供访问私有成员的公有函数,那么其私有成员是否“存在“呢?还会不会被继承呢?...其实,这些私有成员的确是存在的,而且会被继承,只不过程序员无法通过正常的渠道访问到它们。考察如下程序,通过一种特殊的方式访问了类的私有成员。...综上所述,类的私有成员一定存在,也一定被继承到派生类,从大小也可以看出派生类包含了基类的私有成员,读者可自行考证。只不过收到C++语法的限制,在派生类访问基类的私有成员只能通过间接的方式进行。

    2.4K20

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

    这是EasyC++系列的第85篇,私有继承的最后一篇。 私有继承(三) 通过私有继承,我们可以实现一种has-a的关系。...根据C++ Primer的阐述,大多数程序员会更倾向于使用包含,因为这更加容易理解。类声明当中包含对象,我们可以在成员函数当中直接使用,这显然更加直观,而使用继承的方式则非常地抽象。...保护继承 保护继承私有继承的变体,保护继承在列出基类时使用关键字protected: class Student : protected std::string, protected std::valarray...和私有继承一样,基类的接口在派生类当中也是可用的,但在继承层次结构之外是不可用的。当我们从派生类继续派生出第三代类的时候,私有继承和保护继承的区别就出来了。...使用私有继承时,第三代类不能使用基类的接口,因为基类的公有方法在派生类当中变成了私有方法。而使用保护继承的话,基类的公有方法在派生类变成受保护的,所以第三代派生类依然可以使用。

    31210

    私有成员是否会被继承

    首先,Java官方文档明确表示私有成员【即私有属性(field)和私有方法(method)】不会被继承。...,父类的私有成员在子类的内存是出现了的 再举个例子: public class AppTest{ @Test public void toTest2() throws Exception...name);} } 总结下上面的例子: 子类的内存中出现了父类的属性 虽然子类不能直接操作父类属性,但是可以通过间接的方式操作(父类提供的公共方法、super方法或者反射) 以次可以推断出,子类确实是继承了父类的私有成员的...即:子类不会继承其父类的私有成员。但是,如果父类具有能访问其私有字段的public或project修饰的方法,则子类也可以使用这些方法获取其私有成员。...自然是内存,这也是为什么子类的内存可以看到父类的私有成员; 但是由于封装性的原理,私有成员只能在自己的类中使用,所以子类是无法在自己的类中使用父类的私有成员的,既然无法使用,那我说他没有继承,也没什么问题吧

    1.2K31

    【C++】继承 ⑤ ( public 公有继承 - 示例分析 | protected 保护继承 - 示例分析 | private 私有继承 - 示例分析 )

    基类的保护成员 // 公有继承 子类仍是 保护成员 , 不可在类外部访问 //child.b; 访问 私有变量 c : 基类私有成员 , 公有继承 子类仍是 私有成员 , 不可在类外部访问...; // 不可访问 : 基类的保护成员 // 保护继承 子类仍是 保护成员 , 不可在类外部访问 //child.b; 访问 私有变量 c : 基类私有成员 , 保护继承...私有继承 - 示例分析 ---- 1、private 私有继承 private 私有继承 : 父类成员 在 子类 , 所有成员的访问控制权限 变为 private , 基类的 所有成员 都不可在子类访问...b : 基类的保护成员 , 私有继承 子类变为子类的 保护成员 , 不可在类外部访问 ; // 不可访问 : 基类的 保护成员 变为 派生类 私有成员 // 私有继承 子类私有成员...// 私有继承 子类私有成员 , 不可在类外部访问 //child.b; // 不可访问 : 基类私有成员 // 私有继承 子类仍是 私有成员 , 不可在类外部访问

    20240

    Python类公开方法、私有方法和特殊方法的继承原理

    在Python,对象的私有成员在类外部、派生类或程序无法直接访问,但是可以通过“对象名._类名__私有成员名”这样一种特殊的形式来访问。...基类的构造方法和公开方法可以在类的外部直接访问,也可以被派生类继承。 在访问对象成员时,如果不存在则按照派生顺序逆序查找其基类是否存在该成员,如果都不存在则抛出异常。...__private() self.public() #私有方法在派生类不能直接访问 def __private(self): print('__private() method...,会继承基类的构造方法 >>> class B(A): #这不会覆盖基类的私有方法 def __private(self): print('__private() method in...另外,Python的类还有大量特殊方法,详见Python对象特殊方法及其用法演示,在创建派生类时,基类已经实现的特殊方法可以被派生类继承

    2K50

    C++基类私有成员会被继承

    1.派生类间接访问基类私有成员 在类的继承,基类私有成员在派生类是“不可见“的,这种”不可见“是指在派生类的成员函数,或者通过派生类的对象(指针,引用)不能直接访问它们。...()就可以简介访问基类A私有成员。...2.私有成员会被继承吗 如果基类并没有提供访问私有成员的公有函数,那么其私有成员是否“存在“呢?还会不会被继承呢?...其实,这些私有成员的确是存在的,而且会被继承,只不过程序员无法通过正常的渠道访问到它们。考察如下程序,通过一种特殊的方式访问了类的私有成员。...综上所述,类的私有成员一定存在,也一定被继承到派生类,从大小也可以看出派生类包含了基类的私有成员,读者可自行考证。只不过收到C++语法的限制,在派生类访问基类的私有成员只能通过间接的方式进行。

    2.4K41

    Python类的继承、多层继承和多继承

    Python,一个类可以通过继承的方式来获得父类的非私有属性和非私有方法。...一、继承、重写、和调用重写的父类方法 继承的语法为在类名后的小括号()写入要继承的父类名,如果要继承多个类则中间用逗号分隔。...1.父类的非私有属性和非私有方法,子类可以直接继承,子类对象可以直接使用。如果子类要调用父类的私有属性和私有方法,只能通过间接的方法来获取。...4.如果在子类重写父类的方法,需要使用父类同名方法的功能,在父类功能基础上做扩展,则子类可以在重写的方法调用父类被重写的方法,使用super()来调用。 ? 二、类的多层继承 类可以多层继承。...同一个类可以继承多个类,如上面的HuaWei类同时继承了Phone和Computer两个类。这时,两个父类的方法和属性子类都可以使用,两个父类的父类的属性和方法也可以使用。

    5.3K30

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

    继承语法 C++允许一个类继承多个类 语法: class 子类 :继承方式 父类1 , 继承方式 父类2......多继承可能会引发父类中有同名成员出现,需要加作用域区分 C++实际开发不建议用多继承 示例: class Base1 { public: Base1() { m_A = 100; } public...; cout << s.Base2::m_A << endl; } int main() { test01(); system("pause"); return 0; } 总结: 多继承如果父类中出现了同名情况...,子类使用时候要加作用域 菱形继承 菱形继承概念: ​ 两个派生类继承同一个基类 ​ 又有某个类同时继承者两个派生类 ​ 这种继承被称为菱形继承,或者钻石继承 典型的菱形继承案例: 菱形继承问题:...使用了虚继承后对比未使用虚继承解决菱形继承 总结: 菱形继承带来的主要问题是子类继承两份相同的数据,导致资源浪费以及毫无意义 利用虚继承可以解决菱形继承问题

    72010

    从零开始学C++之继承(一):公有私有保护继承、overloadoverwriteoverride之间的区别

    在关键字protected后面声明,与private类似,其差别表现在继承与派生时对派生类的影响不同 (三)、公有/私有/保护继承 ?...(四)、接口继承与实现继承 我们将类的公有成员函数称为接口。 公有继承,基类的公有成员函数在派生类仍然是公有的,换句话说是基类的接口成为了派生类的接口,因而将它称为接口继承。...实现继承,对于私有、保护继承,派生类不继承基类的接口。派生类将不再支持基类的公有接口,它希望能重用基类的实现而已,因而将它称为实现继承。...要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数、析构函数而导致编译错误。...尽管类MakeFinal的构造函数和析构函数都是私有的,但由于类FinalClass2是它的友元函数,因此在FinalClass2调用MakeFinal<FinalClass2

    96300

    less继承

    经过上一篇 less的层级结构 的讲解之后,本章节开展的内容为 less 继承,还是一样的老套路来引出 less 继承,先来看一段代码如下* { margin: 0; padding: 0...50%; top: 50%; transform: translate(-50%, -50%);}如果你想实现在 less 只有一份,在转换之后的文件当中也只有一份这个时候你就可以使用 less 继承....son:extend(.center) { width: 200px; height: 200px; background: blue; }}来看看转换之后的代码图片less 继承和...less 混合的区别使用时的语法格式不同转换之后的结果不同 (混合是直接拷贝,继承是 并集选择器)如有不正确之处,还请大佬指正我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

    21420

    Python继承

    面向对象的继承 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不同的执行结果...python3x版本只有一种类: python3使⽤的都是新式类. 如果基类谁都不继承....和 私有方法 子类对象 不能 在自己的方法内部,直接 访问 父类的 私有属性 或 私有方法 子类对象 可以通过 父类 的 公有方法 间接 访问到 私有属性 或 私有方法 子类对象 不能 在自己的方法内部...,直接 访问 父类的 私有属性 或 私有方法 子类对象 可以通过 父类 的 公有方法 间接 访问到 私有属性 或 私有方法 私有属性、方法 是对象的隐私,不对外公开,外界 以及 子类 都不能直接访问 私有属性...在⾯向对象思想. 是把⼀些看似⽆关紧要的内容组合到⼀起统⼀进⾏存储和使⽤. 这就是封装. 继承: ⼦类可以⾃动拥有⽗类除了私有属性外的其他所有内容. 说⽩了, ⼉⼦可以随便⽤爹的东⻄.

    71830

    iOS继承

    概念 子类可以直接复用父类的成员 子类继承父类所有方法的声明和实现 非私有的实例变量以及协议 继承时要在.h声明一下 继承具有单根性和传递性 继承的根类:大多都继承自 NSObject 类,所以在定义一个类时...,要继承NSObject 类 继承就是代码优化公共部分交给父类 @interface Phone : NSObject @property (nonatomic,strong) NSString *name...,减少代码冗余 OC中一个类可以继承另一个类 被继承的类称为父类或超类(基类) 继承的类称为子类或派生类 子类可以直接拥有父类中所有允许子类继承的属性和方法 继承关系是可以传递的,子类除了可以调用父类的方法...,也可以调用父类的父类的方法,也就是说继承可以确保某个父类型之下的所有类都会有父类型所持有的全部方法 子类可以有自己的成员变量、属性和方法 单一继承性,OC不支持多继承 继承中方法调用的流程: 首先到子类去找...不适合继承的场景 当你发现你的继承超过2层的时候,你就要好好考虑是否这个继承的方案了 不满足上面一些条件时候 优缺点 优点: 提高代码复用性 可以让类与类之间产生关系,正是因为继承让类与类之间产生了关系所以才有了多态

    17210

    Python继承

    有时,继承反映了问题的自然结构,这样使程序更容易理解。任何事情都有双重性。继承也有可能使程序变得难以阅读。调用一个方法时,有时很难判断它是在哪定义的。相关的代码可能分散在几个模块。...如果要引用子类的某个属性,首先在子类寻找,没有就去到父类寻找它的定义,在没有的话,就一直向上找下去,知道找到为止。 方法的寻找方式与属性相同。...有时候,子类的方法可以直接调用父类的方法,方式如下: BaseClass.method(self,arguments) 1. 定义一个父类: >>> class Person: ......print "grade : %-20d" % self.grade; 私有方法: 在C++语言中有私有方法的概念,私有方法只能被类的内部方法调用。...在Python ,类的私有方法和私有属性,不能够从类的外面调用。类的方法和属性是公有,还是私有,可以从它的名字判断。如果名字是以两个下划线开始,但并不是以两个下划线结束,则是私有的。

    73620
    领券