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

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

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

2.4K20

C++新旅程:三大特性之继承,详细介绍

A类,A类中的打印函数也被继承了,所以B类的对象可以调用A类的成员函数,接下来我们修改一下代码,在B类中访问A类的成员变量 编译器告诉我们_a不可以被访问因为他是A类中的私有成员,而_A可以被访问因为他是...*私有(private)成员: 私有成员只能在类的内部被访问。 编译器告诉我们_a不可以被访问,因为它被声明为私有成员。这意味着你不能从类的外部或派生类中直接访问它。...**而public继承的方式可以通过派生类的对象访问基类的public成员,而private继承的方式和protected继承的方式中,却不可以通过派生类的对象访问基类的public成员(可以这么理解此时基类的...下图辅助理解3.继承的对象模型我们发现B类的大小是16个字节,但是我们之前继承方式当中不是说基类的私有成员派生类不能访问吗?...此时如果我们建一个B类的对象,访问数据成员m和调用函数print(),会产生二义性吗(冲突)总结: 1.子类对象可以直接访问到子类中同名成员2.子类对象加作用域可以访问到父类同名成员3.当子类与父类拥有同名的成员函数

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

    聊下继承与多态的区别?

    派生类:基于基类创建的新类,又称“子类”。派生类可以访问基类中所有的非私有成员。...private:私有继承 基类private成员 不能继承 基类public、protected成员,可以继承,在派生类中需要通过private访问 protected:保护继承: 基类private...成员 不能继承 基类public成员,可以继承,在派生类中相当于是protected访问 基类protected成员,可以继承,在派生类中相当于是protected访问 public:公有继承:...基类private成员 不能继承 基类public成员,可以继承,在派生类中相当于是public访问 基类protected成员,可以继承,在派生类中相当于是protected访问 派生方式 基类的public...基类的非私有成员在派生类中的访问属性保持不变 (2)多态 按字面的意思就是多种形态,指一个类实例的相同方法在不同情况下有不同表现形式。

    5.8K20

    C++:继承#1

    派生类的成员函数可以访问基类的公共及保护数据成员,甚至可以直接初始化它们,但更好的习惯是,通过基类的接口去操作基类的数据成员,类与类之间尽量互不干扰,使用接口进行沟通,方便后续维护。...保护继承:将基类的保护和公有成员全部视为自己的保护成员。 私有继承:将基类的保护和公有成员全部视为自己的私有成员。...protected 隔离 私有继承 private private private 隔离 公共继承(公有继承)意味着外界可以访问基类中的 public 成员,仅不能访问 protected 成员;...保护继承意味着外界不能访问基类中的任何成员,但可以通过派生类中的自身公有成员函数访问继承出的保护成员; 私有继承同样也意味着外界不能访问基类中的任何成员,但可以通过派生类中的自身公有成员函数访问继承出的私有成员...保护继承与私有继承类似,私有继承会影响下一次的继承,因为 private 成员是不能被派生类访问的。 调整访问控制 在派生类中,可以调整成员的访问控制属性,将公有调整为私有,保护调整为公有等等操作。

    41020

    【C++深度探索】继承机制详解(一)

    继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。 2.继承定义 2.1定义格式 下面我们看到Person是父类,也称作基类。...private: 私有访问限定符,只有类内部的其他成员函数可以访问私有成员。类的外部无法直接访问私有成员,但可以通过公共成员函数间接访问私有成员。...在公有继承中,基类的公有成员和保护成员都可以在派生类中访问,私有成员不能在派生类中直接访问。...在私有继承中,基类的公有成员和保护成员在派生类中都变为私有成员,私有成员不能在派生类中直接访问。...protected,同理父类的private成员继承到子类中也是选择private方式,在子类中不可访问 对于私有成员也是被继承到子类中,只是不可访问: ③基类private成员在派生类中是不能被访问

    9110

    【C++深度探索】:继承(定义&&赋值兼容转换&&作用域&&派生类的默认成员函数)

    继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。...在公有继承中,基类的公有成员和保护成员都可以在派生类中访问,私有成员不能在派生类中直接访问。 保护继承(protected inheritance):使用关键字"protected"表示的继承方式。...在保护继承中,基类的公有成员和保护成员在派生类中都变为保护成员,私有成员不能在派生类中直接访问。 私有继承(private inheritance):使用关键字"private"表示的继承方式。...在私有继承中,基类的公有成员和保护成员在派生类中都变为私有成员,私有成员不能在派生类中直接访问。...三,继承中的作用域 (1) 在继承体系中基类和派生类都有独立的作用域。 (2) 子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定义。

    14310

    C++重要知识点小结---2

    2.派生类可以继承基类的所有公有和保护的数据成员和成员函数。 保护的访问权限对于派生类来说是公有的,而对于其它的对象来说是私有的。即使是派生类也不能访问基类的私有的数据成员和成员函数。...在派生类中允许重载基类的成员函数。如果基类中的函数是虚函数,当使用指针或引用访问对象时,将基于实际运行时指针所指向的对象类型来调用派生类的函数。...访问控制权限: 私有继承时,基类中不管是公有的,还是保护的或者为私有的,一律在子类中变成私有成员。 保护继承时,基类中公共和保护的成员在子类中变成保护的,而基类中私有的成员在子类中变成私有的。...公共继承时,基类中为公共、保护和私有的成员在子类中仍保持为公共、保护和私有的。 如果不标明继承为公共还是保护或者私有,则默认的继承是私有的。...一个私有的或保护的派生类不是子类,因为非公共的派生类不能做基类能做的所有的事。 保护继承与私有继承类似,继承之后的类相对于基类来说是独立的;保护继承的类对象,在公开场合同样不能使用基类的成员。

    72970

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

    继承和多态中的访问控制权限 3.1 继承中的访问控制权限 继承中,访问控制权限决定了派生类对基类成员的访问能力。...在上述代码中,Dog类继承了Animal类。通过对象dog调用accessBase()函数,我们可以看到派生类对不同访问权限的访问情况。...Dog类可以访问Animal类的公共和受保护成员(eat()和sleep()),但无法访问Animal类的私有成员(run())。...3.2 多态中的访问控制权限 多态是指通过基类的指针或引用来操作派生类的对象,实现不同对象的不同行为。在多态中,使用基类指针或引用可以限制对对象成员的访问能力。...在继承中,访问控制权限决定了派生类对基类成员的访问能力。在多态中,使用基类指针或引用可以限制对对象成员的访问。

    9010

    继承

    公有继承特点 子类可以直接访问基类的所有公有和保护成员,其效果如同它们是在子类中声明一样 对于基类的私有成员,在子类中存在但不能访问 在子类中定义基类中同名的公有成员或保护成员,子类中的成员会隐藏基类同名成员...私有继承特点 将基类公有和保护成员私有化,禁止外部通过该子类访问,也禁止该子类的子类访问 子类指针或引用不能隐式转换成基类类型指针或引用 访问控制权限 访问控制限定符 访问控制属性 基类 子类 外部...友元 public 公有成员 OK OK OK OK protected 保护成员 OK OK NO OK private 私有成员 OK NO NO OK 不写继承方式,默认私有继承 继承方式是用来指明基类成员在派生类中的最高访问权限的...其效果如同它们是在派生类中声明一样 */ //基类中的保护成员在派生类中可以访问 m_name = "梦凡"; //基类中的公有成员在派生类中可以访问 m_gender = 1;...虚继承是为了解决棱形继承中成员访问的二义性。在A B继承方式前加关键字virtual,编译器将Base的数据保存在一个公共位置,通过虚基表访问。

    69520

    C++重要知识点小结---2

    2.派生类可以继承基类的所有公有和保护的数据成员和成员函数。 保护的访问权限对于派生类来说是公有的,而对于其它的对象来说是私有的。即使是派生类也不能访问基类的私有的数据成员和成员函数。...在派生类中允许重载基类的成员函数。如果基类中的函数是虚函数,当使用指针或引用访问对象时,将基于实际运行时指针所指向的对象类型来调用派生类的函数。...访问控制权限: 私有继承时,基类中不管是公有的,还是保护的或者为私有的,一律在子类中变成私有成员。 保护继承时,基类中公共和保护的成员在子类中变成保护的,而基类中私有的成员在子类中变成私有的。...公共继承时,基类中为公共、保护和私有的成员在子类中仍保持为公共、保护和私有的。 如果不标明继承为公共还是保护或者私有,则默认的继承是私有的。...一个私有的或保护的派生类不是子类,因为非公共的派生类不能做基类能做的所有的事。 保护继承与私有继承类似,继承之后的类相对于基类来说是独立的;保护继承的类对象,在公开场合同样不能使用基类的成员。

    82670

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

    一、继承介绍: C++中的继承是面向对象编程中的一个重要概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的公共数据和函数成员。...public成员 _a = 5; //在派生类中可以访问基类的protect成员 _name = "王五"; _age = 66; //不可在派生类中访问基类的私有成员,公有继承都不行...,因为基类的私有成员,在派生类不可见 //_num = 20; //报错 //访问派生类自己的成员当然是可以的....cout << endl; return 0; } 我们一般都使用公有继承,在公有继承下: (1)如果我们想让成员在派生类中可以访问,在类外面不可访问,此时就适合在基类中定义为protected成员...四、切片 派生类是由继承基类后,加上自己的成员构成的,那我们只取派生类中基类的那部分,将其赋值给一个基类对象,这就类似于切割或者切片.

    15010

    【继承】—— 我与C++的不解之缘(十九)

    继承呈现了⾯向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的函数层次的复⽤,继承是类设计层次的复⽤。...int _age = 18; // 年龄 string _address; // 地址 string _tel; // 电话 string _title; // 职称 }; ​ 对于这种情况,我们就可以将这些公共成员放到一个类...在派生类在不可见 在派生类在不可见 基类private 成员在派生类中无论以什么方式继承都是不可见的;(这里不可见指的就是私有成员还是被继承到派生类当中去,但是语法上,无论是在派生类里面还是类外面都不能直接去访问它...public 继承的派生类对象,可以赋值给基类的 指针/引用 ;这种我们可以形象的称为**切片(或者切割) **,简单来说就是将派生类中基类的那一部分切出来,基类的指针/引用 指向派生类中切出来的那一部分...基类和派生类中有同名函数时,派生类将屏蔽基类的同名函数的直接访问(这种情况叫做隐藏)(可以和后面多态中的覆盖/重写对比记忆,在多态章节的博客中详细讲解)。

    11710

    【C++】继承(定义、菱形继承、虚拟继承)

    继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。...在继承中,一般用公有和保护,少用私有。 总结: 基类private成员在派生类中无论以什么方式继承都是不可见的。...基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在 派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的。...实际上面的表格我们进行一下总结会发现,基类的私有成员在子类都是不可见。...基类和派生类对象赋值转换 派生类对象可以赋值给基类对象。 注意:必须是公有继承才可以,保护和私有都不行。 public继承是is -a的关系,即每个子类对象都是一个特殊的父类对象。

    15610

    (暑假提升-继承专题)

    总结: 基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面 都不能去访问它。...基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。 可以看出保护成员限定符是因继承才出现的。...实际上面的表格我们进行一下总结会发现,基类的私有成员在子类都是不可见。...从内存中能够观察到D对象内部,A,B与C到底怎么储存的,能够类似于类中的函数一样,将A中的a放在最后一个类似于公共的区域,让a只存在一个,改变修改相同的一个a。...其实就是因为这第一行的地址,才能够让我们找到具体的位置在哪,结下来我们将这串地址放在内存中寻找一下,看看是什么。

    7710

    【C++】继承

    那这个过程其实就叫做继承,这里被继承的类(即原有类)叫做基类或者父类,新产生的类叫做派生类或者子类。 继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。...那这里的不可见是什么意思呢? 这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。...我们来看一下是不是不可见: 现在我将Person的成员变量都变成私有的 然后我在Student里面再加一个成员函数 此时程序是可以正常运行的 但是我如果想访问继承下来的Person...2.1 派生类对象赋值给基类对象 那大家看这样可以吗? 还是我们上面写的两个类,Student继承了Person,那子类的对象可以赋值给父类的对象吗? 是可以的。...基类可以赋值给派生类吗? 是不行的,基类对象不能赋值给派生类对象。

    14610

    【C++】继承

    除基类的私有成员无论以任何方式被继承都无法被访问外,其他成员和继承方式都遵循最小权限的原则,公有>保护>私有,在两种权限中找出最小权限,则基类的成员访问限定符被继承到子类后的访问限定符为此最小权限。...实际运用中,公有继承最为常见,私有继承和保护继承并不常见,因为你继承的目的就是想让子类能够访问到基类的某些成员,并且保护继承下来的成员只能在派生类中进行使用,派生类外都无法访问到基类的公有成员函数,所以实际中扩展维护性不强...父类和某个函数的友元关系不能继承到子类上去,比如下面代码中Display是父类Person的友元函数,可以访问父类的保护成员,但是继承到子类后Display并不可以访问子类的保护成员。...虚拟继承后,BC派生类中不再存储虚基类成员,改为存储虚基表指针,虚基表指针指向的一张表叫做虚基表,这个表中存储了派生类成员到虚基类成员的地址偏移量,通过偏移量就可以找到虚基类成员的内存地址。...有人可能会有疑问,为什么要存派生类到虚基类的地址偏移量呢?虚基类成员不就在D类的最下面吗?我们D类对象的内存空间大小已知,那通过D类指针不就能找到最下面的虚基类成员吗?

    71010

    C++继承(多继承、菱形继承?)

    继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。 以前我们接触的复用都是函数复用,而继承是类设计层次的复用。...解决方法: 我们将公共的信息放到一个 People 类中去: // 基类 class People { public: void Print() { cout 继承为例 测试例子二: 以private继承为例 Ⅲ. 父类和子类对象赋值转换 那么有了继承关系,如果我们将子类赋值给父类,这样子可以吗? 答案是可以的!...派生类的默认成员函数 6个默认成员函数,“ 默认 ” 的意思就是指我们不写,编译器会变我们自动生成一个,那么在派生类中,这几个成员函数是如何生成的呢?...注意: 虚基表中第一个位置是为后面的多态虚表预留的存偏移量的位置,第二个位置才是当前类对象存储距离公共虚基类的偏移量的位置。 我们可以调用其他的内存窗口进行观察!

    2K20

    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-7 继承的访问能力(续) 4.2.6 基类与派生类的关系 1派生类是基类的具体化基类是对若干个派生类的抽象,而派生类是基类的具体化;基类抽取了它的派生类的公共特征,而派生类通过增加行为将抽象类变为某种有用的类型

    62420

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

    6.1.1 友元函数定义 如果基类定义了一个友元函数,该友元函数只能访问基类的私有和保护成员,而不能访问派生类的私有或保护成员。...反之,如果友元函数在派生类中定义,它也无法访问基类的私有和保护成员。...6.2 继承与静态成员 C++ 中的静态成员在继承关系中具有一些特殊的行为。无论继承了多少次,基类中的静态成员在整个继承体系中始终只有一个实例。派生类可以共享访问基类中的静态成员。...9.2 继承的优势与应用 9.2.1 代码复用 继承允许派生类复用基类的代码,这样我们可以将公共的功能放在基类中,而将特有的功能放在派生类中,避免了代码的重复编写。...虽然派生类可以继承基类的成员,但如果基类的成员是私有的,派生类无法直接访问。 9.4.5 继承的代码复杂性 虽然继承能够带来代码复用,但过度使用继承,尤其是多重继承,会使代码变得复杂、难以理解和维护。

    8710

    C++:继承与派生

    ,非常冗余,于是我们的祖师爷为了解决这个问题,设计出了继承的语法,比如说用户的共同点是都是用户,我们就可以写一个关于人的类,作为基类,而不同类型用户就作为基类的派生类,去继承基类的成员,从而达到我们的目的...3、继承基类成员访问方式的变化 总结: 1、基类private成员在派生类中无论以什么方式继承都是不可见的。...这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。...2、基类private成员在派生类中是不能被访问,如果基类成员不想在类外直接被访问,但需要在派生类中能访问,就定义为protected。可以看出保护成员限定符是因继承才出现的。...在继承体系中基类和派生类都有独立的作用域。 2. 子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏, 也叫重定义。

    18610
    领券