首页
学习
活动
专区
圈层
工具
发布

C++中派生类对基类成员的访问形式

C++中派生类对基类成员的访问形式主要有以下两种: 1、内部访问:由派生类中新增成员对基类继承来的成员的访问。 2、对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。...今天给大家介绍在3中继承方式下,派生类对基类成员的访问规则。...基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类的成员还是通过派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数间接访问。...基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类成员还是派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数直接访问它们。...基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类成员还是通过派生类的对象,都无法直接访问基类中的private成员。

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

    【C++】继承 - 从基类到派生类的代码复用逻辑

    基类和派生类间的转换 public继承的派生类对象可以赋值给基类的指针/基类的引用。这里有个形象的说法叫切片或者切割(复制兼容转换)。...寓意把派生类中基类那部分切出来,基类指针或引用指向的是派生类中切出来的基类那部分。 基类对象不能赋值给派生类对象。 基类的指针或者引用可以通过强制类型转换赋值给派生类的指针或者引用。...但是必须是基类的指针是指向派生类对象时才是安全的。这里基类如果是多态类型,可以使用RTTI(Run-Tim Type Information)的dynamic_cast来进行识别后进行安全转换。...因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序。 派生类对象初始化先调用基类构造再调派生类构造。 派生类对象析构清理先调用派生类析构再调基类的析构。...多继承可以认为是C++的缺陷之一,后来的⼀些编程语言都没有多继承,如Java。

    81210

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

    二、转换的本质 派生类可以转换为基类的本质是: ①为什么派生类可以转换为基类:派生类从基类而来,因此派生类中包含了基类的方法和成员。...此时基类可以通过指针或引用指向派生类(相当于将派生类从基类中继承的那部分方法和成员绑定到基类上了,相当于派生类被截断了),然后基类就可以将派生类假装是一个基类对象来使用(调用其中的成员/方法) ②为什么基类不能转换为派生类...如果将一个基类对象绑定到派生类的指针/引用上,此时派生类通过指针/引用访问自己新定义的成员/方法时,发现找不到(因此不能将基类转换为派生类) 例如:下面B继承于A,子类继承于父类,同时为父类的成员开辟了空间...演示案例② 我们修改演示案例①,上面是将基类的指针指向于派生类。...,但是多态只有发生在基类指针/引用指向于派生类的情况下才会发生,此处基类是普通对象,而不是引用/指针,因此访问的还是A中的show2()函数 ?

    2.5K10

    派生类对基类中虚函数和非虚函数的继承效果

    ,这里是Animal指针指向,所以他就调用Animal里面的,普通函数是父类为子类提供的“强制实现”,也就是只要是父类指针调用普通函数,那就是父类的普通函数 而虚函数的作用,主要是为了让父类指针可以调用子类的函数...,这种是在运行时才决定调用哪个函数 1、虚函数:   C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。...子类可以重写父类的虚函数实现子类的特殊化。 2、纯虚函数:   C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。   ...C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。   C++中的纯虚函数也是一种“运行时多态”。...3、普通函数:   普通函数是静态编译的,没有运行时多态,只会根据指针或引用的“字面值”类对象,调用自己的普通函数。   普通函数是父类为子类提供的“强制实现”。

    1.3K10

    从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换

    从输出可以看出: 派生类对象的构造次序: 先调用基类对象成员的构造函数,接着是基类的构造函数,然后是派生类的对象成员的构造函数,最后是派生类自身的构造函数。...四、派生类到基类的转换 当派生类以public方式继承基类时,编译器可自动执行的转换(向上转型 upcasting 安全转换) 派生类对象指针自动转化为基类对象指针 派生类对象引用自动转化为基类对象引用...派生类对象自动转换为基类对象(特有的成员消失) 当派生类以private/protected方式继承基类时 派生类对象指针(引用)转化为基类对象指针(引用)需用强制类型转化。...将派生类对象看成基类对象     //pm = &e1; // 基类对象指针无法转化为派生类对象指针。...; // 基类对象无法强制转化为派生类对象     return 0; } 五、基类到派生类的转换 基类对象指针(引用)可用强制类型转换为派生类对象指针(引用), 而基类对象无法执行这类转换.

    2.3K00

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

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

    1.6K40

    【C++】C++ 类中的 this 指针用法 ① ( C++ 类中的 this 指针引入 | this 指针用法 | 代码示例 )

    一、C++ 类中的 this 指针 1、C++ 类中的 this 指针引入 在 C++ 类中 , this 指针 是一个特殊的指针 , 由系统自动生成 , 不需要手动声明定义 , 在类中的每个 非静态成员函数...中 , 都可以调用 this 指针 ; this 指针 是指向 调用对象 自身 的指针 , 也就是调用 该成员函数 的 实例对象 的 内存地址 ; 由于 this 指针只能在 非静态成员函数内部使用..., 因此 this 指针是类内部使用的指针 , 使用 this 可以访问 实例对象 中 的所有 公有 public / 保护 protected / 私有 private 成员 ; 2、C++ 类中的...this 指针用法 C++ 类中的 this 指针用法 : 使用 this 作为指针 : 在 非静态成员函数 中 , 直接使用 this 作为 本实例对象 的指针 ; this 使用 this-> 访问成员变量...访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ; 先获取指针指向的数据 然后访问数据中的成员变量 ; (*this).成员变量名 在 C++

    1.7K20

    【C++高级主题】虚基类的声明

    在 C++ 的继承体系中,当多个派生类共享同一个基类时,可能会出现一种经典问题 ——菱形继承(Diamond Inheritance)。...直接派生类负责初始化 最底层派生类负责初始化 访问开销 直接访问,无额外开销 通过虚基类指针间接访问 二义性处理 可能导致多份基类副本 解决菱形继承二义性问题 1.3 对比普通继承与虚继承的内存布局...二、虚基类的核心特性解析 2.1 支持到基类的常规转换 在虚继承中,指向派生类的指针或引用可以隐式转换为指向虚基类的指针或引用,且这种转换是唯一的(因为虚基类在最终派生类中只存在一个实例)。...但在虚继承中,为了确保虚基类仅被初始化一次,C++ 规定: 虚基类的构造函数由最终派生类(即继承体系中最底层的类)显式调用; 中间派生类(如 B 和 C)的构造函数中对虚基类构造函数的调用会被编译器忽略...(来自 C)和普通基类(来自 D)存在?

    14710

    聊下继承与多态的区别?

    派生类:基于基类创建的新类,又称“子类”。派生类可以访问基类中所有的非私有成员。...//派生类创建格式: class derived-class : access-specifier base-class /* ①access-specifier表示继承类型。...基类private成员 不能继承 基类public成员,可以继承,在派生类中相当于是public访问 基类protected成员,可以继承,在派生类中相当于是protected访问 派生方式 基类的public...多态实现的三个条件: ①必须是公有继承 ②必须是通过基类的指针或引用 指向派生类对象 访问派生类方法 ③基类的方法必须是虚函数,且完成了虚函数的重写 例如: //tips:虚函数指在类的成员函数前加*...2.继承关系中,并不要求基类方法一定是虚函数。而多态时,要求基类方法必须是虚函数。 3.多态:子类重写父类的方法,使得子类具有不同的实现。且运行时,根据实际创建的对象动态决定使用哪个方法。

    6.4K20

    【C++ 继承】—— 青花分水、和而不同,继承中的“明明德”与“止于至善”

    public 继承的派生类对象 可以赋值给 基类的指针 /基类的引用。...这里有个形象的说法叫切片。寓意把派生类中基类那部分切出来,基类指针或引用指向的是派生类中切出来的基类那部分。 基类对象不能赋值给派生类对象。...基类的指针或者引用可以通过强制类型转换赋值给派生类的指针或者引用。但是必须是基类的指针是指向派生类对象时才是安全的。 为什么呢?下面为大家分析基类和派生类之间的转换是如何进行的,以及底层的原理。...安全性问题: 注意:向上转型是安全的,指的是派生类的指针或者引用转换成基类的指针或引用是安全的!...基类的友元函数可以通过基类引用/指针,访问派生类对象中继承自基类的私有成员。

    68910

    C++ 类、继承、重载《Rice C++ 学习开发》

    工作一年后,发现读大学的时候,做项目的代码感觉就像一坨shi一样。只要想到什么就写什么,完全没有代码复用的概念。 C++基础知识说明,如果你学过C语言,那么基础知识是一样的,比循环、运算符、指针等…。...因此基类成员如果不想被派生类的成员函数访问,则应在基类中声明为 private。...当使用不同类型的继承时,遵循以下几个规则: 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问...保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。...私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。 其中:在c语言中,可以通过结构体来实现继承这个概念。

    87910

    60秒问答:多态和函数重载的关系?

    隐藏:不用作用域, 通过派生类访问:派生类同名函数,隐藏基类函数 或者通过基类指针访问,基类函数隐藏派生类。 二、 问题:如何解隐藏问题?...编译时的多态:函数重载和运算符重载(根据参数不同选择具体函数 ) 运行时的多态:通过类继承和虚函数实现的(根据虚表指针 指向 派生类的函数,还是基类的函数) 四、 类型转换有几种情况,有什么区别?...,隐藏呢: 是指派生类的函数屏蔽了与其同名的基类函数, 注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏。...隐藏:不用作用域, 通过派生类访问:派生类同名函数,隐藏基类函数 或者通过基类指针访问,基类函数隐藏派生类。 二、 问题:如何解隐藏问题?...编译时的多态:函数重载和运算符重载(根据参数不同选择具体函数 ) 运行时的多态:通过类继承和虚函数实现的(根据虚表指针 指向 派生类的函数,还是基类的函数) 四、 类型转换有几种情况,有什么区别?

    1.8K10

    面试题:什么是虚函数?

    在 C++ 中,虚函数是一种特殊的成员函数,它允许在基类中使用 virtual 关键字声明,在派生类中进行重写,并且可以通过基类指针或引用调用派生类的成员函数。...调用虚函数 虚函数通过基类指针或引用来调用派生类的成员函数。...return 0; } 上面的代码中,通过基类指针 p 分别调用了基类和派生类的 speak() 函数,实现了虚函数多态性的效果。...虚析构函数 还有一个非常重要的内容:如果你在具有派生类的基类析构函数中不是将析构函数声明为虚拟,则不会删除具有派生类对象的基类指针的派生类对象。...总结 虚函数是 C++ 中实现多态的重要机制之一,它允许在基类中声明函数为虚拟函数,在派生类中进行重写,并且可以通过基类指针或引用调用派生类的成员函数。

    32600

    C++多态与虚函数

    C++ 多态实例 程序运行时的动态即动态多态性,这里要研究的问题是:当一个基类被继承为不同的派生类时,各派生类可以使用与基类成员相同的成员名,如果在运行时用同一个成员名调用类对象的成员,会调用哪个派生类的成员...也就是说,通过基类指针只能访问派生类的成员变量,但是不能访问派生类的成员函数。  为了消除这种问题,让基类指针能够访问派生类的成员函数,C++ 增加了虚函数(Virtual Function)。...C++ 多态总结 有了虚函数,基类指针指向基类对象时就使用基类的成员(包括成员函数和成员变量),指向派生类对象时就使用派生类的成员。...C++ 提供多态的目的是:可以通过基类指针对所有派生类(包括直接派生和间接派生)的成员变量和成员函数进行“全方位”的访问,尤其是成员函数,从而实现一个接口,多种方法。...虚函数和纯虚函数都是为了多态性服务,使得基类指针或引用可以指向变化多端的子类以实现变化多端的版本。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。

    52820

    【C++类和数据抽象】隐含的 this 指针

    在 C++ 的面向对象编程中,this指针是一个非常重要且独特的概念。它是一个隐含在每一个非静态成员函数中的指针,虽然在代码中通常不会显式地看到它,但它却在背后默默地发挥着关键作用。...理解this指针的工作原理和使用场景,对于掌握 C++ 类和对象的高级编程技巧至关重要。...1.2 什么是this指针 在 C++ 中,每个非静态成员函数都有一个隐含的参数,即this指针。它是一个指向调用该成员函数的对象的指针。...对于普通的非const成员函数,this指针的类型是类名*;对于const成员函数,this指针的类型是const 类名*。意味着在const成员函数中,不能通过this指针修改对象的成员变量。...4.2 在多态中的应用 在多态的场景下,通过基类指针或引用调用虚函数时,this指针也会根据实际对象的类型进行正确的指向。

    7610

    封装、继承、多态、重载:C++中的强大特性与代码设计

    继承 C++中的继承是面向对象编程的一个重要概念,它允许一个类(派生类/子类)从另一个类(基类/父类)继承属性和行为。...C++中的继承有以下几种类型: 公有继承(public inheritance):派生类继承了基类的公有成员和保护成员,并且这些成员在派生类中的访问权限与基类中的一样。...旧类被称为基类或者父类,新类被称为派生类或者子类。 多态 C++中的多态是面向对象编程的一个重要概念,它允许使用指针或引用来处理不同类型的对象,而实际上执行的是根据对象类型动态选择的相关操作。...dynamic_cast用于将基类指针或引用转换为派生类指针或引用,如果转换成功,返回指向派生类的指针或引用;如果转换失败,则返回空指针或抛出bad_cast异常。...对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现 注意: 抽象类只能作为基类来使用 不能声明抽象类的对象,可以使用抽象类的指针和引用 构造函数不能是虚函数,析构函数可以是虚函数 可以试用指向抽象类的指针支持运行时多态性

    1K10

    C++基础——C++面向对象之类、对象与继承基础总结(类和对象概念、构造函数与析构函数、this指针、继承)

    1.3 this指针         每个对象都拥有一个 this 指针, this 指针记录对象的内存地址,在 C++中, this 指针是指向类自身数据的指针, 简单的来说就是指向当前类的当前实例对象...类派生列表以一个或多个基类命名,形式如下: class derived-class: access-specifier base-class access-specifier:访问修饰符,与类的访问修饰限定符一样...):当一个类派生继承公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。...2)保护继承(protected): 当一个类派生继承保护基类时,基类的公有和保护成员将成为派生类的保护成员。...3)私有继承(private):当一个类派生继承私有基类时,基类的公有和保护成员将成为派生类的私有成员。 下面举个例子说明继承的使用。

    1.3K50
    领券