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

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

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

2.4K70

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

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

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

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

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

    1.1K40

    202453学习笔记:派生类的默认成员函数

    6个默认成员函数,“默认”的意思就是指我们不写,编译器会变我们自动生成一个,那么在派生类 中,这几个成员函数是如何生成的呢?...要明确的是,继承关系里,先有父类,派生类才能去继承,所以派生类的构造函数必须要遵守先父后子的原则,必须调用基类的构造函数初始化基类的那一部分成员。...此外,父类的赋值重载会和派生类的赋值重载构成隐藏,因此使用时要注意 三.析构函数 派生类的析构函数会在被调用完成后自动调用基类的析构函数清理基类成员。...因为这样才能 保证派生类对象先清理派生类成员再清理基类成员的顺序。...,保证派生类对象先清理派生类成员再清理基类成员的顺序.

    9510

    _类内成员函数可以访问本类对象的私有成员

    类内成员函数可以访问本类对象的私有成员 sList是一个类 私有成员是head,有一个成员函数的形参是本类对象(的引用,引不引用不影响结论和原因) ==为什么呢!...对象b是sList类的,而这个intersection函数是sList的成员函数 head虽然是sList类的对象的私有成员,但是是在sList类内访问的 ==就是 在类内访问了本类(的实例化对象)的私有成员...因为这是在类内访问的,又不是在类外== 这说明了,类的成员的访问权限,是对于==类==而言的,决定在==类==外是否可被访问 而非对于对象来说的(因为对象不同但是都是属于同一种类,类的实例化对象的成员,...本来就是类的成员,只是抽象和实例化的问题 这非常合理地体现了 类 的封装性 这个就是不行的,在类外访问了 这一点是非常好用的,可以利用这一点 ==用成员函数肆无忌惮地访问对象的私有成员!...==只要声明函数是类的成员函数,将外部同类对象设为形参(或加个引用)就可以了!! 不必再为如何访问到同类外部对象的私有成员而苦思了!

    86330

    C++中的const成员变量和成员函数

    在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。...const成员函数(常成员函数) const 成员函数可以使用类中的所有成员变量,但是不能修改它们的值,这种措施主要还是为了保护数据而设置的。const 成员函数也称为常成员函数。...我们通常将 get 函数设置为常成员函数。读取成员变量的函数的名字通常以get开头,后跟成员变量的名字,所以通常将它们称为 get 函数。...需要强调的是,必须在成员函数的声明和定义处同时加上 const 关键字。...函数头部的结尾加上 const 表示常成员函数,这种函数只能读取成员变量的值,而不能修改成员变量的值,例如char * getname() const。

    30930

    1小时深入c++面向对象编程

    图4-3 单继承 4.2.3 继承方式 public:公有继承 private:私有继承 protected:保护继承 作用:控制基类中声明的成员在多大的范围内能被派生类的用户访问 补充:对象只能访问类中...pbulic(公有)成员,不能访问private和protected成员 缺省继承方式为private 4.2.3 继承对基类成员的访问能力 公有继承:1派生类成员函数可以访问基类非私有成员 2派生类的派生类成员函数可以访问基类非私有成员...3类的对象可以访问基类的公有成员 私有继承:1派生类成员函数可以访问基类非私有成员 2派生类的派生类成员函数无法访问基类所有成员 3类的对象无法访问基类的所有成员 保护继承:1派生类成员函数可以访问基类非私有成员...2派生类的派生类成员函数可以访问基类非私有成员 3类的对象无法访问基类的所有成员 4.2.4 总结 ?...图4-13 成员函数二义性 解决方法:1区别出是类A或类B的f函数,c1.A::f()或c1.B::f()                 2在类中定义同名函数f 当一个派生类从多个基类派生,而这些基类又有一个共同的基类

    62420

    C++基础-继承

    公有继承中,派生类是基类的一种,比如,我们可以说,金枪鱼是鱼的一种。 阅读介绍继承的文献时,“从…继承而来”(inherits from)和“从…派生而来”(derives from)术语的含义相同。...例如,基类的公有成员遇到私有继承时,就变成派生类中的私有成员;基类的保护成员遇到公有继承时,就变成派生类中的保护成员;基类的私有成员派生类不可见。...基类的公有成员在派生类中也是公有成员,基类的保护成员在派生类中也是保护成员,基类的私有成员派生类不可见。 公有继承用于"是一种"(is-a)的关系。...基类的私有成员仍然为基类所私有,派生类不可见。 与私有继承类似,保护继承也表示 has-a 关系。不同的时,基类的公有和保护成员变为派生类中的保护成员,能够被派生类及派生类的子类访问。...2.5 总结 下表中,表头部分表示基类的三种成员,表格正文部分表示不同继承方式下,对应的基类成员在派生类中的访问权限。

    98420

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

    派生类可以继承基类的成员,但是对于net_price这种与类型相关的操作必须对其重新定义,即派生类需要对这些操作提供自己的新定义以覆盖override从基类继承而来的旧定义 在C++中,基类必须把两种成员函数区分开...成员函数如果没被声明成虚函数,那么其解析过程发生在编译时而不是运行时 派生类可以继承定义在基类中的成员,但是派生类的成员函数不一定有权访问从基类继承而来的成员(派生类可以访问公有成员,但是不能访问私有成员...尽管从语法上来说我们可以在派生类构造函数体内给它的共有或受保护的基类成员赋值,但最好不要这么做。 2.3 继承与静态成员 如果基类定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义。...虚函数与作用域 从名字查找先于类型检查我们可以得知为什么基类和派生类中的虚函数为什么必须有相同的形参列表了。...另外某些定义基类的方式也可能导致有的派生类成员称为被删除的函数: 如果基类中的默认构造函数、拷贝构造函数、拷贝赋值运算或析构函数是被删除的函数或者不可访问,则派生类中对应的成员将是被删除的,原因是编译器不能使用基类成员来执行派生类对象基类部分的构造

    1.2K20

    基类派生类多态虚函数?

    成员函数与继承派生类可以继承其基类的成员, 然而有时候派生类必须对其重新定义。派生类需要对这些操作提供自己的新定义以覆盖从基类继承而来的旧定义。...成员函数如果没被声明为虚函数,则其解析过程发生在编译时而非运行时。就会按照实际情况调用。 派生类可以继承定义在基类中的成员,但是派生类的成员函数不一定有权访问从基类继承而来的成员。...和其他使用基类的代码一样,派生类能访问公有成员,而不能访问私有成员。 不过在某些时候基类中还有这样一种成员,基类希望它的派生类有权访问该成员,同时禁止其他用户访问。...我们用受保护的(protected)访问运算符说明这样的成员。 派生类必须通过使用类派生列表(clss erivatin list)明确指出它是从哪个(哪些)基类继承而来的。...现在,我们只需知道访问说明符的作用是控制派生类从基类继承而来的成员是否对派生类的用户可见。 如果一个派生是公有的,则基类的公有成员也是派生类接口的组成部分。

    19520

    十、继承

    注意访问权限:在继承时,要注意基类成员的访问权限,确保派生类能够访问到需要的成员。 构造函数和析构函数:派生类的构造函数需要调用基类的构造函数来初始化继承来的成员。...访问权限: 派生类不能增加基类成员的访问权限(例如,基类中的 protected 成员在派生类中不能变为 public)。 但派生类可以进一步限制基类成员的访问权限(例如,通过私有继承)。...从内存布局的角度看,派生类对象中确实包含了这些私有成员。 访问权限的变更仅影响继承后的成员的访问方式,不会改变基类中成员本身的访问权限。...如果派生类定义了同名的静态变量,则它会隐藏基类中的同名静态变量,而不是覆盖它。 静态成员函数:可以通过基类或派生类的对象(以及类名本身,如果它们是可访问的)来访问基类的静态成员函数。...注意,由于Derived类没有定义staticVar或staticFunc,所以它们是从Base类继承的。如果Derived类定义了同名的静态成员,那么这些成员将隐藏基类中的同名成员。

    7710

    第 15 章 面向对象程序设计

    派生类应该遵循基类的接口,通过调用基类的构造函数来初始化那些从基类中继承而来的成员。派生类的初始化过程大致为:基类初始化——>基类构造函数体——>派生类初始化——>派生类构造函数体。...对于基类中定义的静态成员,因为它属于基类类型,而不是基类对象,则在整个继承体系中只存在该成员的唯一定义。不论从基类中派生出来多少个派生类,对于每个静态成员来说都只存在唯一的实例。...---- 15.5 访问控制与继承 派生类的成员和友元只能访问派生类对象中的基类部分的受保护成员,对于普通的基类对象中的成员不具有特殊的访问权限,即在派生类中也不能通过基类对象来访问基类的 protected...基类的友元在访问派生类成员时不具特殊性,类似的,派生类的友元也不能随意访问基类的成员。但是基类的友元是可以访问内嵌在派生类对象中的基类成员。...派生类可能会将合成的拷贝控制成员定义为删除的,这与基类有关: 如果基类中的默认构造函数、拷贝构造函数、拷贝赋值运算符或析构函数是被删除的函数或不可访问,则派生类中对应的成员将是被删除的。

    1K30

    访问私有成员——从技术实现的角度破坏封装 性

    比如,我们都知道每个线程都有一个自己的栈,线程内的局部变量出了作用域就会被释放,那么有没有可能跨线程从另外一个线程去访问该线程的局部变量呢?...‘int main()’中: test.cc:7:15: 错误:‘int A::data_’是私有的 int data_ = 0; 从报错信息看,因为data_成员变量是私有的,而通过对象访问私有成员变量是不被允许的...定义了一个函数模板,其模板参数为int A::*Member,功能是返回类A中的成员变量,编译后,报错如下: test.cc: 在函数‘int main()’中: test.cc:7:15: 错误:‘int...第二次尝试 在上面的提示中,显示不能直接访问私有成员,标准提供了个方法,就是将需要访问类私有成员的函数或者类声明为friend。看到这块,你可能会想,有了friend用得着你教?。...本着大方向不变的原则,依然使用模板的方式访问私有成员,而对于上节中提示的非法访问私有成员,我也采用将对应函数声明为friend的方式。

    24430

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

    基类的公有成员在派生类中仍然是公有的 基类的保护成员在派生类中仍然是受保护的 基类的不可访问的成员在派生类中仍然是不可访问的 基类的私有成员在派生类中变成了不可访问的 总结:在公有派生的情况下,通过派生类自己的成员函数可以访问继承过来的公有和保护成员...多重继承 01 一个类从多个基类派生 代码格式: class 派生类名: 访问控制 基类名1, 访问控制 基类名2, … { //定义派生类自己的成员 } 像这样: // 基类A, 也叫根类 class.../ 调用派生类C的showC()函数 // 派生类C私有继承自基类B, 所以基类B中私有成员b, 在派生类C中不可访问, 基类B中公有成员setB(), showB()在派生类C中变私有...如果我们想要访问被隐藏的基类中的成员则使用作用域分辨符B::gunc(); A func B func */ } 02 派生类支配基类的同名函数 如果派生类定义了一个同基类成员函数同名的新成员函数...在这里,直接使用成员名只能访问派生类中的成员函数,使用作用域运算符,才能访问基类的同名成员函数。 派生类中的成员函数名支配基类中的同名的成员函数名,这称为名字支配规则。

    1.1K20

    【C++进阶篇】像传承家族宝藏一样理解C++继承

    继承中的访问权限 4.1 基类成员在派生类中的访问权限 基类的 public、protected 和 private 成员在派生类中的访问权限取决于继承方式。...下面是不同继承方式下的访问权限表: 从表中可以看出基类的private成员在派生类(子类)始终不可见,而基类的public成员和protected成员的是否能被访问取决于本身成员的访问权限与继承方式,...继承中的作用域与成员访问 5.1 作用域的独立性与同名成员的隐藏 在继承关系中,基类与派生类各自拥有独立的作用域。...如果派生类中定义了与基类成员同名的变量或函数,基类的同名成员将被隐藏,这种现象称为隐藏(Hiding)。也叫重定义同名成员在派生类中会覆盖基类中的成员,导致基类成员无法被直接访问。...从结果可以看出基类的拷贝构造和赋值运算符重载优先级优于派生类。为了保证派生类对象的完整性,派生类的拷贝构造函数和赋值运算符必须调用基类的相应函数,确保基类成员正确处理。

    10710

    【C++高阶】C++继承学习手册:全面解析继承的各个方面

    这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它 基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问...继承中的作用域 关于作用域的注意事项: 在继承体系中基类和派生类都有独立的作用域。 子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义。...(在子类成员函数中,可以使用 基类::基类成员 显示访问) 需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏 注意在实际中在继承体系里面最好不要定义同名的成员 成员变量隐藏 当继承的基类与子类有同名的成员变量时...因此,虚拟继承通过减少重复存储的数据成员来消除数据冗余 虚拟继承通过改变派生类访问虚基类成员的方式来解决这个问题。在虚拟继承中,派生类对象通过虚基表指针来访问虚基类(即共同祖先类)的成员。...由于虚基表中存储了虚基类成员的地址,因此派生类对象可以明确地知道应该访问哪个虚基类成员,从而消除了二义性。 加上表中偏移量可以找到最底下的A 7.

    43010

    【C++进阶篇】C++继承进阶:深入理解继承的复杂性

    6.1.1 友元函数定义 如果基类定义了一个友元函数,该友元函数只能访问基类的私有和保护成员,而不能访问派生类的私有或保护成员。...反之,如果友元函数在派生类中定义,它也无法访问基类的私有和保护成员。...这样,虚拟继承避免了基类构造函数的重复调用。 8.3 访问基类成员的方式 传统继承: 在传统继承中,派生类会直接继承基类的成员,且每个继承链中的类拥有独立的基类实例。...因此,派生类中访问基类成员时不需要特别指定哪个基类的成员。 虚拟继承: 在虚拟继承中,由于派生类共享基类的唯一实例,访问基类成员时,可能需要显式指定基类。...9.4.2 构造函数与析构函数的调用顺序 继承中的构造函数和析构函数调用顺序是有规则的: 构造函数:从最基类到最派生类依次调用。 析构函数:从最派生类到最基类依次调用。

    8510

    【C++】继承 ⑩ ( 继承机制中的 static 静态成员 | 子类中访问父类静态成员的方法 )

    一、继承机制中派生类中的 static 关键字 1、子类继承父类静态成员 子类继承父类静态成员 : 父类 ( 基类 ) 中 使用 static 关键字 定义的 静态成员变量 , 可以被所有的 子类 (...派生类 ) 共享 ; 2、父类静态成员访问控制权限的改变 继承自 父类的 静态成员变量 , 仍然遵循 继承中 子类的 访问控制特性 , public 公有继承 : 父类成员 在 子类 中 , 访问控制权限...成员 ; 父类中的 private 成员 仍然是 private 成员 ; protected 保护继承 : 父类成员 在 子类 中 , 访问控制权限 变为 protected , 基类的 公有成员...和 保护成员 可以在子类访问 , 私有成员不可在子类中访问 ; 父类中的 public 成员 变为 子类中的 protected 成员 ; 父类中的 protected 成员 仍然是 protected...成员 ; 父类中的 private 成员 仍然是 private 成员 ; private 私有继承 : 父类成员 在 子类 中 , 所有成员的访问控制权限 变为 private , 基类的 所有成员

    54710

    C++:51---继承中的构造函数、析构函数、拷贝控制一系列规则

    规则如下: 如果基类中的默认构造函数、拷贝构造函数、拷贝赋值运算符、或析构函数是被删除的或者是不可访问的,则派生类中对应的成员将是删除的,原因是编译器不能使用基类成员来执行派生类对象中属于基类的部分操作...如果在基类中有一个不可访问或删除掉的析构函数,则派生类中合成的默认和拷贝构造函数将是被删除的,因为编译器无法销毁派生类对象的基类部分 编译器不会合成一个删除掉的移动操作。...当我们使用=default请求一个移动操作时,如果基类中的对应操作是删除的或不可访问的,那么派生类中该函数是被删除的,原因是派生类对象的基类部分不可移动。...: 在基类构造函数执行的时候,派生类的部分是未定义状态 在基类析构函数执行的时候,派生类的部分已经被释放了 所以在基类的构造函数或析构函数中调用虚函数是不建议的,因为: 虚函数在执行的时候可能会调用到属于派生类的成员...,派生类中的成员将被默认初始化 从基类中继承的构造函数的特点 规则①:和普通成员的using声明不一样,一个构造函数的using声明不会改变该构造函数的访问级别。

    1.5K30
    领券