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

为什么派生类的大小包括基类的私有成员?

这个问题涉及到面向对象编程中的继承和类的大小概念。在派生类中,基类的私有成员也包括在派生类的大小中,是因为派生类继承了基类的所有成员,包括私有成员。

在面向对象编程中,继承是一种实现代码重用的方式,它允许一个类(派生类)从另一个类(基类)继承属性和方法。派生类可以继承基类的公有成员和保护成员,但不能直接访问基类的私有成员。然而,私有成员仍然是派生类的一部分,因为它们是基类的一部分,所以派生类的大小需要包括基类的私有成员。

派生类的大小还包括派生类自己的成员,包括公有成员、保护成员和私有成员。这些成员可能会覆盖或重载基类的成员,但它们仍然是派生类的一部分,需要包括在派生类的大小中。

总之,派生类的大小包括基类的私有成员,是因为派生类继承了基类的所有成员,包括私有成员。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

C++中派生类成员访问形式主要有以下两种: 1、内部访问:由派生类中新增成员继承来成员访问。 2、对象访问:在派生类外部,通过派生类对象对从继承来成员访问。...1、私有继承访问规则 当继承方式为私有继承时,public成员和protected成员被继承后成为派生类private成员派生类其它成员可以直接访问它们,但是在外部通过派生类对象无法访问...private成员私有派生类中是不可直接访问,所以无论是派生类成员还是通过派生类对象,都无法直接访问从继承来private成员,但是可以通过提供public成员函数间接访问。...private成员私有派生类中是不可直接访问,所以无论是派生类成员还是派生类对象,都无法直接访问从继承来private成员,但是可以通过提供public成员函数直接访问它们。...private成员私有派生类中是不可直接访问,所以无论是派生类成员还是通过派生类对象,都无法直接访问private成员

2.4K70

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

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

1.1K40
  • 202453学习笔记:派生类默认成员函数

    要明确是,继承关系里,先有父派生类才能去继承,所以派生类构造函数必须要遵守先父后子原则,必须调用构造函数初始化那一部分成员。...如果没有默认构造函数,则必须在派生类构造函数初始化列表阶段显示调用。 2.拷贝构造 派生类拷贝构造函数必须调用拷贝构造完成拷贝初始化。...此外,父赋值重载会和派生类赋值重载构成隐藏,因此使用时要注意 三.析构函数 派生类析构函数会在被调用完成后自动调用析构函数清理成员。...因为这样才能 保证派生类对象先清理派生类成员再清理成员顺序。...,保证派生类对象先清理派生类成员再清理成员顺序.

    8910

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

    base3 a1->leg(); //base1 a1->head(); //base2 Bird * a1 = new Bird(); return 0; } 为什么输出为...,那就是父普通函数 而虚函数作用,主要是为了让父指针可以调用子类函数,这种是在运行时才决定调用哪个函数 1、虚函数:   C++虚函数主要作用是“运行时多态”,父中提供虚函数实现,为子类提供默认函数实现...子类可以重写父虚函数实现子类特殊化。 2、纯虚函数:   C++中包含纯虚函数,被称为是“抽象”。抽象不能使用new出对象,只有实现了这个纯虚函数子类才能new出对象。   ...3、普通函数:   普通函数是静态编译,没有运行时多态,只会根据指针或引用“字面值”对象,调用自己普通函数。   普通函数是父为子类提供“强制实现”。   ...因此,在继承关系中,子类不应该重写父普通函数,因为函数调用至于对象字面值有关。 参考链接

    8410

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

    二、转换本质 派生类可以转换为本质是: ①为什么派生类可以转换为派生类而来,因此派生类中包含了方法和成员。...此时可以通过指针或引用指向派生类(相当于将派生类中继承那部分方法和成员绑定到上了,相当于派生类被截断了),然后就可以将派生类假装是一个对象来使用(调用其中成员/方法) ②为什么不能转换为派生类...:因为派生类可能会定义自己新成员/方法,但是这些成员/方法是中所没有的。...如果将一个对象绑定到派生类指针/引用上,此时派生类通过指针/引用访问自己新定义成员/方法时,发现找不到(因此不能将转换为派生类) 例如:下面B继承于A,子类继承于父,同时为父成员开辟了空间...三、继承方式对类型转换影响 遵循下面3个规则: 假设B继承于A ①只有当B公有地继承A时,用户代码才能使用派生类转换;如果B是受保护/私有的继承于A,则不能使用派生类转换 因为保护或者私有继承

    1.7K10

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

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

    85530

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

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

    71770

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

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

    82170

    C++基础-继承

    例如,公有成员遇到私有继承时,就变成派生类私有成员保护成员遇到公有继承时,就变成派生类保护成员私有成员派生类不可见。...内部包括声明以及实现部分,外部包括对当前调用代码以及其它声明及实现代码。 2.2 公有继承 公有继承特点是公有成员和保护成员作为派生类成员时,它们都保持原来状态。...is-a 表示派生类一种,比如金枪鱼(派生类)是鱼()一种。 2.3 私有继承 私有继承特点是公有成员和保护成员都变成派生类私有成员。...对于派生类 Derived,其 sizeof 运算结果为数据成员占用空间大小加上派生类数据成员占用空间大小,因此值为16。...注意一点,派生类对象所在内存空间里含有数据成员信息,包括私有数据成员,但派生类没有权限访问私有数据成员,编译器在语法上不支持。

    98020

    C++私有成员会被继承吗

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

    2.4K41

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

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

    2.4K20

    C++ 虚拟继承

    1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟是为解决多重继承而出现。如:D继承自B1、B2,而B1、B2都继 承自A,因此在D中两次出现A中变量和函数。...为什么需要虚继承? 由于C++支持多重继承,那么在这种情况下会出现重复这种情况,也就是说可能出现将一个两次作为可能性。比如像下面的情况 ?...2.1时间:在通过继承对象访问虚对象中成员包括数据成员和函数成员)时,都必须通过某种间接引用来完成,这样会增加引用寻址时间(就和虚函数一样),其实就是调整this指针以指向虚对象,只不过这个调整是运行时间接完成...4.2“覆盖”是指派生类函数覆盖函数,特征是: (1)不同范围(分别位于派生类); (2)函数名字相同; (3)参数相同; (4)函数必须有virtual 关键字。...4.3“隐藏”是指派生类函数屏蔽了与其同名函数,特征是: (1)如果派生类函数与函数同名,但是参数不同,此时,不论有无virtual关键字,函数将被隐藏(注意别与重载混淆)。

    2.4K80

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

    对象存储空间 对于一个空,里面既没有数据成员,也没有成员函数,该类对象大小为1Byte。 静态数据成员不占对象内存空间,同时,成员函数包括构造函数和析构函数也是不占空间。...继承与派生 声明派生类一般形式为: class 派生类名 [继承方式] 名{ 派生类新增加成员 }; 其中继承方式包括 public (公用)、 private (私有的)和 protected...成员派生类访问属性: 公用继承(public inheritance):公用成员和保护成员派生类中保持原有访问属性,其私有成员仍为私有 私有继承(private inheritance...):公用成员和保护成员派生类中成了私有成员,其私有成员仍为私有 受保护继承(protected inheritance):公用成员和保护成员派生类中成了保护成员,其私有成员仍为私有...同时,无论哪一种继承方式,在派生类中是不能访问私有 成员私有成员只能被本类成员函数所访问,毕竟派生类不是同一个 构造派生类对象时,必须对数据成员、新增数据成员成员对象数据成员进行初始化

    1.3K10

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

    一、不能自动继承成员函数 构造函数(包括拷贝构造函数) 析构函数 =运算符 二、继承与构造函数 构造函数不被继承,派生类中需要声明自己构造函数。...声明构造函数时,只需要对本类中新增成员进行初始化,对继承来成员初始化调用构造函数完成(如果没有给出则默认调用默认构造函数)。...从输出可以看出: 派生类对象构造次序: 先调用对象成员构造函数,接着是构造函数,然后是派生类对象成员构造函数,最后是派生类自身构造函数。... *>(pm2);     //e1 = m2;  // 私有或保护继承时候,派生类对象无法转化为对象。     ...//e1 = reinterpret_cast(m2); // 私有或保护继承时候,派生类对象无法强制转化为对象。

    1.5K00

    结合实例深入理解C++对象内存布局

    通过实例来深入理解 C++ 对象内存布局,包括基础数据、带方法私有成员、静态成员继承等。...整体布局如下图: 其实 C++ 标准并没有规定在继承中,派生类成员变量之间排列顺序,编译器可以自由发挥。但是大部分编译器在实现中,都是成员变量在派生类成员变量之前,为什么这么做呢?...我们通过派生类对象访问成员与直接使用对象访问时完全一致,一个派生类对象前半部分就是一个完整对象。 对于成员函数(包括普通函数和静态函数),它们不占用对象实例内存空间。...不论是成员函数还是派生类成员函数,它们都存储在程序代码段中(.text 段)。 带有虚函数继承 带有虚函数继承,稍微有点复杂了。...而这里 dup 是通过拷贝构造函数生成,编译器执行了隐式类型转换,从派生类截断了部分,生成了一个对象。

    47321

    c++中对象和关系_对象只能访问该类私有成员

    任何公有成员可以被外部访问。...所有成员,任何代码均可访问该项,访问权限最大也就意味着最不安全 Private访问修饰符:范围:私有的,只有内部可以进行访问,允许一个将其成员变量和成员函数对其他函数和对象进行隐藏。...只有同一个函数可以访问它私有成员。即使是实例也不能访问它私有成员。...访问权限最小意味着针对于对象自己而言最安全; Protected访问修饰符:范围:受保护以及子类可以进行访问,允许子类访问它成员变量和成员函数。这样有助于实现继承。...和内嵌成员,只有派生类可以访问该项; Internal访问修饰符:范围:内部,默认,程序集内部可以访问,允许一个将其成员变量和成员函数暴露给当前程序中其他函数和对象。

    1.6K10

    C++继承

    : CA(); ~CA(); } class CB : public CA { public: CB(); ~CB(); } 派生类中前面相应大小空间内存保存内容...,而后面的部分保存派生类内容,这样派生类就可以拥有所有成员,而不必重写代码达到了代码重用目的。...,而对于析构调用顺序正好相反,先调用派生类在调用: 对于继承来说有三种:共有继承、私有继承以及保护继承,继承方式不同,派生类对于各种不同属性之间成员访问权限不同,下面再给出一个表格用以说明这个问题...: 通过这个表我们可以总结出一下几点: 1)私有成员在任何情况下都不能被派生类访问; 2)公有继承下其他成员派生类访问属性不变; 3)私有继承下其他成员派生类中全部变为私有; 4)保护继承下其他成员派生类中全部变为保护属性...CA成员;当他们之间都是以私有继承方式,那么CA中成员在CB中都为私有,在CC中就不能访问CA中成员,所以在一般情况下,我们将数据成员声明为保护类型,这样既起到了封装作用,又方便派生类访问

    60020

    c++和继承面试点25连问

    ,先调用构造函数,再调用派生类构造函数; 派生类对象销毁时,先调用派生类析构函数,再调用析构函数。...运行时多态简单来讲就是:使用指针或者引用指向一个派生类对象,在非虚继承情况下,派生类直接继承虚表指针,然后使用派生类虚函数去覆盖虚函数,这样派生类对象通过虚表指针访问到虚函数就是派生类虚函数了...隐藏是指派生类函数屏蔽了与其同名函数,特征如下: 如果派生类函数与函数同名,但是参数不同,此时不论有没有virtual关键字,函数都将被隐藏; 如果派生类函数与函数同名,参数也相同...友元是什么 与友元函数类似,在一个A中声明另外一个B为friend类型,那么这个B就是友元,它访问A私有成员和保护成员都不受限制。...由成员变量和是否有虚函数决定,如果类中有虚函数,那就在所有成员变量基础上加上一个虚函数指针大小,在64位机器中,虚函数指针为8个字节,注意计算大小时候要考虑字节对齐问题。

    98410
    领券