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

非虚拟基类的多态成员类

是指在C++中,一个类作为另一个类的成员,并且该成员类不是虚拟基类时,可以实现多态性。

在C++中,多态性是通过继承和虚函数来实现的。通常情况下,如果一个类作为另一个类的成员,那么成员类的对象在创建时会被直接包含在宿主类的对象中,而不是通过继承的方式。这种情况下,成员类的对象无法直接实现多态性。

然而,如果成员类继承自一个虚拟基类,那么就可以实现非虚拟基类的多态成员类。虚拟基类是指在多重继承中,通过使用关键字"virtual"来声明基类,从而解决由多个派生类共享同一个基类实例所带来的问题。

通过将成员类继承自虚拟基类,并在成员类中定义虚函数,可以实现成员类的多态性。这样,当成员类对象被包含在宿主类对象中时,可以通过指向基类的指针或引用来调用成员类的虚函数,从而实现多态性。

非虚拟基类的多态成员类的优势在于可以在宿主类中使用多态性,提高代码的灵活性和可扩展性。它可以使得宿主类对象在运行时根据实际情况调用不同成员类的虚函数,实现不同的行为。

一个应用场景是在图形界面开发中,可以将不同的控件作为宿主类的成员类,并通过虚函数实现不同控件的特定行为。例如,一个窗口类可以包含按钮、文本框和复选框等不同的控件,通过调用它们的虚函数来实现不同控件的点击、输入和选择等操作。

腾讯云相关产品中,与非虚拟基类的多态成员类相关的产品和服务可能包括云服务器、云数据库、云存储等。具体的产品和服务可以根据实际需求进行选择。以下是腾讯云相关产品的介绍链接地址:

  • 腾讯云服务器:提供弹性计算能力,可根据实际需求快速创建、部署和管理云服务器实例。
  • 腾讯云数据库:提供高性能、可扩展的数据库服务,包括关系型数据库和非关系型数据库。
  • 腾讯云存储:提供安全可靠的对象存储服务,用于存储和管理各种类型的数据。

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

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

相关·内容

派生多态虚函数?

通常在层次关系根部有一个,其他则直接或间接继承而来,这些继承得到称为派生负责定义在层次关系中所有共同拥有的成员,而每个派生定义各自特有的成员。...成员函数与继承派生可以继承其成员, 然而有时候派生必须对其重新定义。派生需要对这些操作提供自己新定义以覆盖从继承而来旧定义。...所以成员函数反正都要被覆盖,从某种意义上来成员函数可以用纯虚函数来代替。...任何构造函数之外静态函数都可以是虚函数。 关键字virtual只能出现在内部声明语句之前而不能用于外部函数定义。 如果把一个函数声明成虚函数,则该函数在派生中也是虚函数。...和其他使用代码一样,派生能访问公有成员,而不能访问私有成员。 不过在某些时候中还有这样一种成员希望它派生有权访问该成员,同时禁止其他用户访问。

18920
  • C++中派生成员访问形式

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

    2.4K70

    C++虚拟继承与虚

    在EGStudent成员函数show()中,直接访问IdPerson或Name都会引发编译错误,因为编译器不知道它们指的是哪个Person对象中成员。...(2)被虚拟继承,叫做虚。虚实际指的是继承方式,而非一个,是动词,而非名词。 (3)为了实现虚拟继承,派生对象大小会增加4。...这个增加4个字节,是因为当虚拟继承时,无论是单虚继承还是多虚继承,派生需要有一个虚表来记录虚继承关系,所以此时子类需要多一个虚表指针,而且只需要一个即可。...(4)虚拟继承中,虚对象是由最远派生构造函数通过调用虚构造函数进行初始化,派生构造函数成员初始化列表中必须列出对虚构造函数调用;如果未列出,则表示使用该虚缺省构造函数。...因为虚拟继承只是表名某个对象在派生对象中只被构造一次,而在本例中Student和Employee对象在EGStudent对象中本来就不会被构造多次,所以不将它们申明虚也是完全可以

    90220

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

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

    2.4K41

    Python 多态

    多态 什么是多态 同一个功能多状变化 多态用法 子类中重写父方法 代码 # coding:utf-8 # 1 书写一个父 class XiaomuFather(object):...def talk(self): print('小慕爸爸说了一句话') def jump(self): print('大家都可以跳') # 2 书写一个子类...,并且继承一个父 class XiaomuBrother(XiaomuFather): def run(self): print('小慕哥哥在奔跑着') def talk...(self): print('小慕哥哥在说话') # 为什么要去多态 # 为什么要去继承父 # 答案: 为了已经写好函数 # 为了保留子类中某个和父名称一样函数功能,...这时候, 我们就用到了多态 # 可以帮助我们保留子类中函数功能 class Xiaomu(XiaomuFather): def talk(self): print('haha

    41410

    成员”与“主体”

    (构造器、静态初始化块、实例初始化块不继承) 解析说构造器、静态初始化块、实例初始化块不算成员,所以不会被继承, 这个时候就有问题了:按照常理来说,构造器、静态初始化块、实例初始化块也是构成部分之一...,为什么就不算成员呢?...通过查阅搜索引擎后发现: 很好,根本没什么用 但是当我翻阅Java中文书籍文档《Head First Java》: 以及英文博文时: 可以发现成员包括实例变量和方法; 而为了弄清楚这些结论出处以及构造器到底属于什么...至此就可以很明确了,java文档中规定成员并不包括构造器、静态初始化块、实例初始化块; 那么,既然它们三个不属于成员,到底属于什么呢?...也就是说Java规定成员​是属性(Field)和方法(Method); 而大家常说,我们中文理解中成员,其实在Java文档定义主体 ​ Java文档: https://docs.oracle.com

    73640

    什么是成员

    什么是成员? —— 新手编程1001问之C#编程基础 ---- 很多同学,在面试时候回遇到什么是面向对象编程?能清晰回答上来并不多。如果再问什么是成员,那就更加懵圈了。...那么到底什么是成员呢? 好,我来回答这个问题。 在面向对象编程中,我们接触最多、最重要对象,就是。而要想彻底弄明白什么是,还必须了解清楚成员。...在C#中,除了语言本身定义最基础object和几个基本数据类型(几种数字类型和字符串类型)以外,我们将面临大量自定义。...那么,引出问题第二部分,什么是成员? 什么是成员?这个其实很好理解,对吧?成员就是成员,它是构成一个组成部分,是对构成一个完整描述重要内容。...成员之三:方法 方法是一种特殊成员,简单说,它就是中包含能实现一定功能程序代码块。 1、方法可以具有参数列表,用于表示传递给方法值或变量引用,参数也必须指定类型。

    2.3K40

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

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

    2.4K20

    与对象,继承,派生,组合,多态

    面向对象编程 1.与对象 在python中先有再有对象,和对象,你可以看成,是把对象相同特征和相同方法汇总再一起,再根据来生成对象,这个对象具有特征与方法 1.命名 class 名...用.把对于值取出来再进行赋值修改,或者直接生成一个同名对象把原来覆盖掉 2.继承 1.父,子类 继承是一种新建方式,新建称为子类,被继承称为父 2.继承写法 class fu...老师给学生打分 nick.scored(zhubajie,python,'0') 5.多态 1.定义 多态指的是一事物有多种形态,(一个抽象有多个子类,因而多态概念依赖于继承) 序列数据类型有多种形态...) peo2.talk() pig2.talk() d2.talk() 3.注意事项 注意:多态多态性是两种概念 多态性是指具有不同功能函数可以使用相同函数名,这样就可以用一个函数名调用不同内容函数...在面向对象方法中一般是这样表述多态性:向不同对象发送同一条消息,不同对象在接收时会产生不同行为(即方法)。也就是说,每个对象可以用自己方式去响应共同消息。

    1.1K10

    python抽象

    与jvm上语言不一样,python语言没有interface关键字,而且除了抽象,每个都有相应接口:实现或继承公开属性(方法或数据类型) 在定义里,受保护属性和私有属性不在接口中:即便...“鸭子类型”:忽略对象真正类型,转而关注对象有没有实现所需方法,签名和语义。 继承抽象很简单,只要实现python里特殊方法__len__之类,这样python就会自动识别。...抽象继承大多都是在collections模块,现在打开这个模块文档看看。...MappingView,Set __contains__,__iter__ ValuesView MappingView __contains__,__iter__ 从官方文档中可以看出,一共有16个...,分为三层: --顶层是Iterable,Container,Sized,Callable,Hashable: 其中Iterable,Container,Sized是各个集合该继承三个抽象,或者至少实现兼容协议

    89110

    Java面向对象——成员

    ​前言 本讲主要初步了解面向对象,介绍了组成部分,并且通过Person来讲解了属性和方法,因为Java是面向对象开发,所以在项目中会创建很多和对象,所以这一讲是十分重要。...二、Java和对象 在Java面向对象中,对象指就是,面向对象有三大特征(封装、继承、多态),后续我们会一一讲解,对象(组成部分包括:属 性:对应成员变量 行 为:对应成员方法...1.定义创建一个语法如下:图片比如一个人:/** * 定义人这个 * 一个人会有名字,年龄,性别,吃饭,学习,上厕所等等。...: 名 对象名 = new 名(); 使用“对象名.对象成员方式访问对象成员(包括属性和方法)比如上面的 Person这个,我们可以这样创建和调用:public class MainDemo...与方法体中“return 返回值”搭配使用,返回值与返回类型一致方法调用: 方法通过方法名被调用,且只有被调用才会执行,上面也是提到过了:“对象名.对象成员”方法参数说明: 方法参数里面的变量是局部变量

    26860

    【C++】数组不可以使用多态原因

    原因: 数组分配是采用:首地址+偏移量方式,而偏移量是固定大小,例如:Node arry[10]; arry[i] 地址:&arry[0]+i*sizeof(Node); 当Node是含有虚函数时候...,arry[]中保存都是Node元素,因为数组取值方式便是固定偏移量,一旦数组中存储是继承的话,那么这个数组取值方式,会导致出现不可见错误。...i = 0; i f()Derive f() . // b[1]->f() 输出结果分析: 1.通过上面的输出,可以看出一旦数组是,就算数组中元素赋值为继承,也是被当作来使用...2.非要在数组中使用多态的话,可以采用指针方式,指针偏移量是固定,可以使继承多态得到实现。

    82210

    成员函数总结

    前言: 如果一个中什么成员都没有,简称为空。 空中真的什么都没有吗?并不是,任何在什么都不写时,编译器会自动生成以下6个默认成员函数。...一、构造函数 1、概念 构造函数是特殊成员函数,需要注意是,构造函数虽然名叫做构造,但是构造函数主要任务并不是开空间创建对象,而是初始化对象。 2、特征 函数名与名相同。...成员变量在中声明次序就是其在初始化列表中初始化顺序,与其在初始化列表中顺序无关~ 二、析构函数: 1、概念 与构造函数功能相反,析构函数不是完成对对象本身销毁,局部对象销毁工作是由编译器完成。...总结: 内置类型成员完成值拷贝(Data) 自定义类型成员调用这个成员拷贝构造(MyQueue) Stack需要自己写拷贝构造,完成深拷贝 顺序表、链表、二叉树等自己创建空间,都需要深拷贝 成员函数定义原则...能定义成const成员函数都应该定义成const,这样const对象(权限平移)和const对象(权限缩小)都可以调用 要修改成员变量成员函数,不能定义const

    6010

    原创】C++成员函数重载、覆盖和隐藏

    题目: 成员函数重载、覆盖和隐藏区别描述正确有?...、函数名字相同,参数相同,无virtual关键字派生函数会"隐藏"父函数 答案: CD 解析: a.成员函数被重载特征: (1)相同范围(在同一个中); (2)函数名字相同;...b.覆盖是指派生函数覆盖函数,特征是: (1)不同范围(分别位于派生); (2)函数名字相同; (3)参数相同; (4)函数必须有virtual 关键字。 c....“隐藏”是指派生函数屏蔽了与其同名函数,规则如下: (1)如果派生函数与函数同名,但是参数不同。此时,不论有无virtual关键字,函数将被隐藏(注意别与重载混淆)。...(2)如果派生函数与函数同名,并且参数也相同,但是函数没有virtual关键字。此时,函数被隐藏(注意别与覆盖混淆)。

    68620

    面向对象 成员

    细分类组成成员 之前咱们讲过大致分两块区域,如下图所示: ?...私有成员 对于每一个成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在内部才能方法 私有成员和公有成员访问限制不同: 静态字段(静态属性) 公有静态字段:可以访问;内部可以访问...__add() # 派生中不能访问 私有方法 总结: 对于这些私有成员来说,他们只能在内部使用,不能再外部以及派生中使用. *ps:非要访问私有成员的话,可以通过 对象....___属性名,但是绝对不允许!!!* *为什么可以通过.___私有成员名访问呢?...其他成员 这里其他成员主要就是方法: 方法包括:普通方法、静态方法和方法,三种方法在内存中都归属于,区别在于调用方式不同。

    84420

    Python中成员

    细分类组成成员 之前咱们讲过大致分两块区域 class A: name = '陈松' # 第一部分:静态字段(静态变量)部分(这一部分调用了自己本身,表示了自己自身属性)...对于每一个成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在内部才能方法 私有成员和公有成员访问限制不同: 静态字段(静态属性 公有静态字段:可以访问;内部可以访问;...__add() # 派生中不能访问 总结 对于这些私有成员来说,他们只能在内部使用,不能再外部以及派生中使用. ps:非要访问私有成员的话,可以通过 对象....___属性名,但是绝对不允许!!! 为什么可以通过.__私有成员名访问呢?因为在创建时,如果遇到了私有成员(包括私有静态字段,私有普 通字段,私有方法)它会将其保存在内存时自动在前面加上名....其他成员 这里其他成员主要就是方法: 方法包括:普通方法、静态方法和方法,三种方法在内存中都归属于,区别在于调用方式不同。

    98240
    领券