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

如果只有子类需要这些数据,那么将所有内容都传递给基类是好的吗?

在面向对象编程中,基类和子类之间的数据传递是一个重要的设计问题。如果只有子类需要这些数据,将所有内容都传递给基类可能不是一个好的做法。

传递所有内容给基类会导致以下问题:

  1. 冗余数据:基类会包含子类不需要的数据,这会增加内存消耗和传输成本。
  2. 安全性问题:将所有数据传递给基类可能会暴露子类的敏感信息,增加系统的安全风险。
  3. 维护困难:如果基类需要处理大量不同子类的数据,会导致基类代码变得复杂且难以维护。

相反,更好的做法是将只有子类需要的数据传递给子类,而不是传递给基类。这可以通过以下方式实现:

  1. 将数据作为参数传递给子类的构造函数或方法:子类可以在需要时接收并处理这些数据。
  2. 使用子类自己的属性或方法来获取所需的数据:子类可以定义自己的属性或方法来获取需要的数据,而不需要依赖基类。

这种方式的优势包括:

  1. 简化设计:子类只需要关注自己需要的数据,而不需要处理其他不相关的数据。
  2. 提高性能:减少了不必要的数据传输和处理,提高了系统的性能和效率。
  3. 增强安全性:子类只能访问自己需要的数据,减少了敏感信息的暴露风险。

在腾讯云的产品和服务中,与此相关的产品包括:

  1. 腾讯云函数(云原生):通过函数计算服务,可以将只有子类需要的数据传递给函数,实现按需处理。 产品介绍链接:https://cloud.tencent.com/product/scf
  2. 腾讯云数据库(数据库):可以根据子类的需求选择适合的数据库服务,存储和管理子类需要的数据。 产品介绍链接:https://cloud.tencent.com/product/cdb
  3. 腾讯云物联网平台(物联网):提供物联网设备连接、数据采集和管理的服务,可以满足子类对物联网数据的需求。 产品介绍链接:https://cloud.tencent.com/product/iotexplorer

请注意,以上仅为示例,实际选择产品和服务应根据具体需求进行评估和决策。

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

相关·内容

《逆袭进大厂》第三弹之C++提高篇79问79答

不过这个合成操作只有在构造函数真正被需要时候才会发生; 如果一个A含有多个成员对象的话,那么A每一个构造函数必须调用每一个成员对象默认构造函数而且必须按照对象在A中声明顺序进行; 2)...拷贝构造函数用来初始化一个非引用类型对象,如果方式进行参数,那么构造实参需要调用拷贝构造函数,而拷贝构造函数需要传递实参,所以会一直递归。 149、你知道空大小是多少?...,则只能使用指针 如果数据对象是结构,则使用引用或者指针 如果数据对象,则使用引用 151、静态函数能定义为虚函数?...; 2) 没有任何构造函数派生自一个带有默认构造函数那么需要为该派生合成一个构造函数,只有这样构造函数才能被调用; 3) 带有虚函数,虚函数引入需要进入虚表,指向虚表指针...; 3) 如果class有虚表,那么它必须被设定初值; 4) 所有上一层构造函数必须被调用; 5) 所有构造函数必须被调用。

2.2K30

如何设计一个C++

对于普通成员变量,我全是private,除非该类作为,而子类需要访问父私有成员,这时候我会将父private改为protected。什么时候用public呢?...这个很明确,如果类会作为被派生时,该析构函数就一定要声明为虚函数,如果某个确定不会被派生,那就不要声明其析构函数为虚函数。 需要提供拷贝构造函数?...(int等):值 参数在函数内不会更改,参数类型如果为class类型:const引用 声明和实现要分开写到不同文件中?...如果子类想要重写某个虚函数时,可以将此函数标记为override,那该函数必须重写父虚函数,否则编译器报错。 标明某个函数虚函数,有子类继承时可以改写此函数行为。...里氏替换原则:子类必须能够替换父,任何引用地方必须能透明使用其子类对象,开放关闭原则具体实现手段之一。

1.5K20

独家 | Python中SOLID原则(附链接)

比较糟糕方法让一个函数做所有的工作: 为了使这个函数更符合SRP原则,我们应该做第一件事函数math_operations分解为只有单一功能函数!...简单地说,如果子类重新定义了同样在父中出现函数,用户不应该注意到任何差异,它只是一个替代品。 例如,如果您正在使用一个函数,而您同事更改了,那您不应该注意到任何差异。...我可以用最简单方式来概括这一原则: 如果子类中重新定义了中也存在函数,那么这两个函数应该具有相同行为。但是,这并不意味着它们必须强制性等同,而是:给定相同输入能得出相同类型结果。...4) 界面分离原则 (ISP “具有很多面向特定客户界面会比只有一个通用界面要好” 在写时候,我们一般只考虑使用一个界面,所有的方法和属性“暴露”出来了,因此,所有用户可以与之交互东西都属于这个...翻译组招募信息 工作内容需要一颗细致心,选取外文文章翻译成流畅中文。如果数据科学/统计学/计算机留学生,或在海外从事相关工作,或对自己外语水平有信心朋友欢迎加入翻译小组。

30930

QT(C++)面试总结

回调函数函数指针一种用法,如果多个关注某个状态变化,此时需要维护一个列表,以存放多个回调函数地址。对于每一个被关注需要做类似的工作,因此这种做法效率低,不灵活。...C++中,实现多态有以下方法:虚函数,抽象,覆盖,模板(重载和多态无关)。 C++ (纯虚函数和抽象) a. 纯虚函数一个在只有声明虚函数,在中无定义。...如果classstruct关键字描述那么默认访问属性是什么? 当出现这种情况时,到底默认public继承还是private继承,取决于子类而不是。...一般来说,两个关键字都是可以,但是由于编程规范问题,如果要定义一种数据结构,那么用struct,如果一种对象的话,那么用class。 tdcall、stdcall、pascall是什么?...Type-id必须指针、引用或者void *; 如果type-id指针类型,那么exdivssion也必须一个指针,如果type-id一个引用,那么exdivssion也必须一个引用

1.9K10

面向对象编程会被抛弃?这五大问题不容忽视

20 世纪 60 年代,编程遇到了一个大问题:计算机还没有那么强大,需要以某种方式平衡数据结构和程序之间能力。 这意味着,如果你有大量数据那么不将计算机推向极限就无法充分利用这些数据。...简单来讲,这意味着某种方法或对象可以用做其他方法或对象模板。从某种意义上说,多态性继承性泛化,因为并不是原始方法或对象所有属性需要传输到新实体。相反,你还可以选择重写一些属性。...脆弱问题 想象一下,如果你已经成功地另一个项目中复用于新代码,那么如果发生变化会怎样? 这可能会破坏你整个新项目的代码,即使你可能什么也没做。...因此,即使在短期内复用代码非常有效,但从长远来看,它可能让你付出一定代价。 菱形继承问题 利用继承可以属性传递给其他。但是,如果你想混合两个不同类属性怎么办?...单一范式存在风险 以上 5 个问题共同点它们存在不合适继承。由于继承没有包含在面向对象编程原始形式中,所以这些问题可能不能称为面向对象本身问题。 但是也并不是只有面向对象编程会被夸大。

48020

经典永不过时!重温设计模式

大家,我Alex,今天谈一谈设计模式,一名优秀开发,应该多少需要了解一些常用设计模式和使用场景,让我们一起来重温一下那些年经典设计模式; 本文主要内容 为什么要掌握设计模式 历史教训 时间回到...组合优于继承 继承可能之间最明显、最简便代码复用方式。如果你有两个代码相同, 就可以为它们创建一个通用,然后将相似的代码移动到其中。但继承可能带来问题: 子类不能减少超接口。...你必须实现父所有的抽象方法,即使它们没什么用。 在重写方法时,你需要确保新行为与其版本兼容。...这一点很重要,因为子类所有对象都可能被传递给以超对象为参数任何代码,相信你不会希望这些代码崩溃。 继承打破了超封装,因为子类拥有访问父内部详细内容权限。...我们需要抽象出一个“”来实现链表功能,其他数据结构只需要简单继承这个链表就可以了。

1.2K40

【C++】继承

都要一个个再去给他们增添这些人类共有的属性? 不需要,使用继承就很方便搞定了这些问题。...我们通过调式也可以观察到: 那这就体现了复用: 子类Student复用了父Person成员(包括成员变量和成员函数),如果没有继承,那这些成员就需要我们自己去定义。...我们来看一下是不是不可见: 现在我Person成员变量变成私有的 然后我在Student里面再加一个成员函数 此时程序可以正常运行 但是我如果想访问继承下来Person...而是: 派生拷贝构造函数必须调用拷贝构造完成部分成员拷贝初始化。 但是Person拷贝构造要Person对象啊,这里s可以?...所以: 定义了static静态成员,则整个继承体系里面只有一个这样成员,静态成员被所有对象包括起子类子类子类共享。 无论派生出多少个子类只有一个static成员实例 。

11110

【C++】多态

虚函数定义较为简单,只需要在函数接口部分加上virtual关键字即可,当虚函数所在被继承时,派生会隐含一个虚函数,此时如果重新定义这个虚函数,并且和虚函数参数列表,返回值,函数名一样.../覆盖: // 父子类函数,同为虚函数,满足三同(函数名返回值参数相同) // 特殊情况: // 1.子类虚函数可以不加virtual,继承后重写虚函数实现,如果你不写BuyTicket...// 假设你用值引用,则形参对象永远都是对象,就算派生对象也不行,因为发生切片赋值,那么在调用函数 // 时候,永远调用都是里面的函数,无法实现多态调用...这里需要分情况,如果普通调用,则虚函数和普通函数并没有任何区别,因为即使你虚函数重写了,但如果调用指针或引用并非类型,那么你还是和普通函数没有区别,并不会去虚表里面找虚函数,而是直接静态绑定,在编译后符号表里面就确定了调用函数地址...,虚表中存放着腰部类到虚成员偏移量,如果腰部类想要访问虚成员时,则通过自身成员变量中表来进行虚成员访问,这便解决了数据冗余问题,在访问冗余数据时,也不会出现二义性了,无论你怎么访问

52120

Google C++ 编程风格指南(三):

拷贝构造函数隐式调用, 也就是说, 这些调用很容易被忽略. 这会让人迷惑, 尤其对那些所用语言约定或强制要求引用程序员来说更是如此....如果使用继承的话, 定义为 public 继承. 定义: 当子类继承时, 子类包含了父所有数据及操作定义....子类不能重写父非虚函数, 当然也就不能修改其实现. 也可能定义了一些数据成员, 还要区分实际布局. 结论: 所有继承必须 public ....只在以下情况我们才允许多重继承: 最多只有一个是非抽象; 其它都是以 Interface 为后缀 纯接口. 定义: 多重继承允许子类拥有多个....存取控制 所有 数据成员声明为 private, 并根据需要提供相应存取函数. 例如, 某个名为 foo_ 变量, 其取值函数 foo(). 还可能需要一个赋值函数 set_foo().

79240

《Effective C++》学习笔记

条款07:为多态声明虚析构函数 如果一个可能有多态子类那么就该声明一个虚析构函数。 如果一个有任何虚函数,那么它就应该有虚析构函数。...条款12:复制对象时勿忘其每一个成分 复制构造函数和赋值构造函数要确保复制了对象内所有成员变量和所有成分,这意味着你如果自定义以上构造函数,那么每增加成员变量,都要同步修改以上构造函数,且要调用相应构造函数...衍生如果声明了与中同名函数(无论虚、非虚,还是其他形式),都会掩盖掉所有同名函数,注意,所有,包括参数不同重载函数,都会不再可见。...虚继承会增加大小、速度、初始化(及赋值)复杂度等成本,如果不带任何数据,将是最具使用价值情况。 模板与泛型编程 条款41:了解隐式接口和编译期多态 和模板支持接口和多态。...条款43:学习处理模板化名称 如果模板那么衍生直接调用成员函数无法通过编译器,因为可能会有特化版模板针对某个不声明该接口函数。

1.1K20

【C++】继承

赋值过程并不会产生临时变量,这里赋值一个天然过程,有一个形象说法叫做切割或切片赋值,形容子类成员进行切割赋值给。...到现在为止,我们已经学过很多域了,比如局部域、全局域、域、命名空间域等等,派生作用域当然也是不同如果继承中子类有名字相同成员函数或变量,则子类会屏蔽父这些同名成员,如果调用则优先调用子类同名成员...拷贝构造函数与构造不同,必须在派生拷贝构造初始化列表处显示调用拷贝构造,完成成员复制。在参时有人可能会有疑问,调用拷贝构造该如何子类成员提取出来呢?...最后归纳一下,将派生分为三部分,内置类型,自定义类型,成员,成员统一调用成员函数进行处理,除析构不需要显式调用外,其他需要显示调用。...若定义出一个静态成员,则在继承体系里面有且仅有这样一个静态成员,无论派生出多少子类只有一个static成员实例。 2.

67110

【C++】继承

可以看到,在学校人员管理系统中,由于人许多行为相同,所以这些中就会存在大量相同成员,此时,我们就可以这些公共属性抽取出来,单独设计成一个作为父,然后让其他作为子类来继承父,从而实现代码复用...---- 三、继承中作用域 1、继承中作用域 (隐藏) 在继承体系中和派生都有各自独立作用域,所以我们可以在子类中定义与父类同名成员变量和成员函数 – 如果子类和父中有同名成员,那么子类成员屏蔽父对同名成员直接访问...在继承中,如果定义了 static 静态成员,则该静态成员也属于所有派生及其对象;即整个继承体系里面只有一个这样成员,并且无论派生出多少个子类只有一个 static 成员实例; class...; // 学号 }; 可以看到,父子类在操作时操作都是同一个静态成员实例,因为父子类中静态成员同一个地址;所以,静态成员属于所有及其对象,以及所有派生及其对象,且只有一份。...(0x14 = 20B, 0x0c = 12B) 这些现象其实是合理: 1、整个 D 对象中只有一份 A 对象成员,并且位于最下面,解决了数据冗余和二义性; 2、B 和 C 对象中多出来那个指针指向内容被称为虚

86800

C# 在定义方法让子类继承接口就能实现

在 C# 里面,接口定义只需要里面存在和接口声明相同方法或属性就可以,而存在方法或属性子类定义还是里面定义无所谓。...通过这样方法可以在里面添加一些辅助方法,而这些方法默认不给子类开启,除非子类继承了接口 在定义方法,如果子类继承接口里面声明方法刚好和定义相同,那么子类可以不需要再次定义。...或者预设了一些方法,这些方法存在性能或其他问题,只有子类声明自己需要这个功能时候才被调用 内部方法隐藏 在里面有一些内部方法,默认不让子类使用,但只有某些特殊子类情况才能被使用。...这个方法上面说到内部方法隐藏升级,用起来将会更复杂 在里面判断当前是否继承了某个接口,如果继承了,那么将会可以调用接口方法。...属性不能给外部类知道,要不大家知道我逗比,只有子类才能知道 此时需要依赖 ILindexiConverter 判断才能决定是否需要做业务 public string GetPrivateString

54020

「MoreThanJava」Day 5:面向对象进阶—继承详解

假设您有一个复杂,基本上可以完成所需工作,但是您需要进行一些小修改。如果您修改了源代码,即使进行了很小更改,也可能会破坏某些内容。...Java 开发工具包 (JDK) 为您提供了丰富集合,您可以根据需要扩展这些。...由于继承可以确保所有的方法在子类中也同样有效,所以能够向发送所有信息也同样可以向子类发送。例如,如果 Video 具有一个 play() 方法, 那么 Movie 也将同样具备。...如果一个子类继承了一个父那么要么继承它,要么自动继承 Object。最终,所有都将 Object 作为祖先。 这意味着 Java 中所有具有一些共同特征。...不过,如果一个声明为 final,只有其中方法自动地称为 final,而不包括字段,这一点需要注意。 方法或声明为 final 主要原因:确保它们不会在子类中改变语义。

50510

Effective c++ 小结

条款14: 确定有虚析构函数 指针指向具体派生,delete指针时候,需要虚函数进行多态。...小tip:如果析构函数不是虚那么和派生析构都要调用 ,先调用派生,再调用 tip2:虚函数要占用class空间,要综合考量 条款15: 让operator=返回*this引用...原因,如果func为member,那么以后书写顺序应该是obj>>cin,obj<<cout,这样不符合 习惯 3,只有non-member才能在最左参数身上实施型别转换。...如果需要对函数f最左侧参数进行型别转换,那么f为non-function,如果需要获取非公共成员变量,声明为frind。...如果类D私有继承于B,类型D对象只不过用类型B对象来实现而已;类型B和类型D对象之间不存在概念上关系 如果私有继承,编译器不会隐式子类对象转化成对象 私有继承,所有函数在子类变成私有属性

76350

Python面试必刷题系列(4)

Python中子类型了解? 鸭子类型(duck typing),python面向对象一种多态机制。...打个比方就是,程序现在需要一个像鸭子一样对象来执行游泳、走、叫功能,但是这时候第过来一个鸟,这个鸟具有这些功能,而且执行效果和鸭子完全一样!!那么,我们就可以认为这个鸟就是一个鸭子类型。...,查找顺序:F->D->A->E->B->C->object,object所有。...原理: 标记:标记过程其实就是,遍历所有的GC Roots对象(栈区中所有内容或者线程都可以作为GC Roots对象),然后所有GC Roots对象可以直接或间接访问到对象标记为存活对象。...如果0代经过一定次数垃圾回收,那么就启动对0代和1代扫描清理。当1代也经历了一定次数垃圾回收后,那么会启动对0,1,2,即对所有对象进行扫描。

68020

【C++】从零开始认识继承

举个例子:加入我们需要一个学校管理系统,那么成员包括学生,老师,保安,宿管…不管是什么身份,总得个人吧,人就会有名字,年龄,家庭住址等基础信息,那么我们就可以把这些共同部分提炼出来作为。...(在子类成员函数中,可以使用 ::成员 显示访问) 需要注意如果成员函数隐藏,只需要函数名相同就构成隐藏。 注意在实际中在继承体系里面最好不要定义同名成员。...就是说友元不能访问子类私有和保护成员,打个比方:爸爸朋友,能说成朋友?...5 继承与静态变量 注意:定义了static静态成员,则整个继承体系里面只有一个这样成员。无论派生出多少个子类只有一个static成员实例!!!...继承:通过扩展已有的来获得新功能代码复用方法 组合:新由现有对象合并而成构造方式 如果二者间存在一个“关系,并且一个要对另外一个公开所有接口,那么继承更好选择 如果二者间存在一个

6110

C++虚函数详解

大家,又见面了,我你们朋友全栈君。...只有拥有虚函数才会拥有虚函数指针,每一个虚函数也都会对应一个虚函数指针。所以拥有虚函数所有对象都会因为虚函数产生额外开销,并且也会在一定程度上降低程序速度。...虚函数表 此板块图片及部分内容引自于haoel大大博客,地址: https://blog.csdn.net/haoel/article/details/1948051 上文已经提到,每个实例化对象都会拥有虚函数指针并且排列在对象地址首部...那么此时情况这样: 首先函数表项仍然保留,而得到正确继承虚函数其指针将会被覆盖,而子类自己虚函数跟在表后。...C++中一个公用一张虚函数表虚函数表,子类子类虚函数表,这极大节省了内存 同名覆盖原则与const修饰符 如果继续深入下去的话我们将会碰见一个有趣状况 class Base

48310

C++之多态

在继承种构成多态要满足两个条件: 必须通过指针或者引用调用虚函数(该指针或者引用操作派生那一部分内容) 被调用函数必须虚函数,且派生必须对虚函数进行重写。...析构函数: 如果析构函数定义为虚函数,则派生析构函数无论是否加virtual关键字都与析构函数构成重写,这里可以理解为编译器对析构函数进行特殊处理析构函数函数名统一处理为destuctor...,这是因为调用函数对象,而派生对象调用函数时派生对象中那一部分。...导致指针p调用成员函数,派生指针p调用派生成员函数。 简单来说: 普通函数调用是谁调用谁; 符合多态函数调用就是指向谁调用谁。...我们可以这个现象理解为一个Bug,并不是派生虚表里没有它自己虚函数,而是这两个虚函数被监视窗口隐藏了。那么如果我们想查看派生虚函数都有那些该如何进行查看呢?

33540

常见c和cpp面试题目汇总(一)

;引用只是一个别名,还是变量本身,对引用任何操作就是对变量本身进行操作,以达到修改变量目的 2、引用只有一级,而指针可以有多级 3、指针时候,还是值传递,指针本身值不可以修改,需要通过解引用才能对指向对象进行操作...九、虚函数怎么实现: 每一个含有虚函数至少有有一个与之对应虚函数表,其中存放着该类所有虚函数对应函数指针(地址);示例对象不包含虚函数表,只有虚指针;派生会生成一个兼容虚函数表...而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象实际类型,本身还是派生等等 2)虚函数调用需要虚函数表指针,而该指针存放在对象内存空间中;若构造函数声明为虚函数,那么由于对象还未创建...; volatile属性转换 4)reinterpret_cast 通常为了一种数据类型转换成另一种数据类型 十九、引用作为函数参数以及返回值好处: 对比值传递,引用好处: 1)在函数内部可以对此参数进行修改...二十、纯虚函数: 纯虚函数只有声明没有实现虚函数,子类约束,接口继承 包含纯虚函数抽象,它不能被实例化,只有实现了这个纯虚函数子类才能生成对象 普通函数静态编译,没有运行时多态

1.3K31
领券