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

有没有更好的方法在基类中做自引用指针,也可以在派生类中工作?

在基类中实现自引用指针并在派生类中工作的方法有多种。以下是其中一种常见的方法:

  1. 使用虚函数和纯虚函数:
    • 在基类中定义一个纯虚函数,该函数返回一个指向基类的指针。
    • 在派生类中实现该纯虚函数,返回一个指向派生类的指针。
    • 这样就可以在基类中通过调用该纯虚函数来获取派生类的指针。
    • 优势:这种方法可以实现基类中的自引用指针,并且在派生类中工作。它提供了一种灵活的方式来处理不同派生类的自引用指针。
    • 应用场景:适用于需要在基类中处理自引用指针,并且在派生类中进行特定操作的情况。
    • 示例代码:
    • 示例代码:
    • 腾讯云相关产品和产品介绍链接地址:暂无推荐的腾讯云相关产品。
  • 使用模板类:
    • 定义一个模板类,模板参数为派生类的类型。
    • 在模板类中定义一个成员函数,返回一个指向派生类的指针。
    • 派生类继承该模板类,并实现该成员函数。
    • 优势:这种方法通过使用模板类,可以在基类中实现自引用指针,并且在派生类中工作。它提供了一种通用的方式来处理不同派生类的自引用指针。
    • 应用场景:适用于需要在基类中处理自引用指针,并且在派生类中进行特定操作的情况。
    • 示例代码:
    • 示例代码:
    • 腾讯云相关产品和产品介绍链接地址:暂无推荐的腾讯云相关产品。

请注意,以上方法是一种常见的实现方式,但并不是唯一的方法。具体的实现方式可能会根据具体的需求和设计模式而有所不同。

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

相关·内容

没想到吧,PHP 外部可以调用私有方法

一般来说, Class 外部是无法调用私有方法,这也是 Private 字面的意思,但是一些很特殊很特殊情况下,如果需要调用,是否可以呢?其实可以使用反射来实现。...reflection->getClosure($object); } return call_user_func_array($callback, $args); } 简单解释一下,首先还是简单判断该方法是否存在...,接着获取对象方法放射,然后判断一下是不是公共方法,如果是公共就正常调用,不是则获取其闭包,最后使用回调方式来调用。...这个函数可以让你调用对象私有或者受保护方法,建议一些特殊情况下才使用。为了方便大家调用,新版 WPJAM Basic 会集成该函数。----

99630

【C++】多态

注意⚠: 重写虚函数时,派生类虚函数不加virtual关键字,可以构成重写(可以认为继承后虚函数被继承下来了派生类依旧保持虚函数属性),但是该种写法不是很规范,不建议这样使用 但是父...但是是有要求虚函数必须返回对象指针引用派生类虚函数必须返回派生类对象指针引用,我们把这种情况称为协变。...另外,这里这里返回派生类指针引用可以是其它继承体系派生类。...另外上面说返回派生类指针引用可以是其它继承体系派生类,什么意思呢? 那就是这样 这样也是可以 不过这个协变可能在实际应用场景不多。 3....那么我们可以定义一个"狗"和一个"猫",它们都继承"动物",并实现了"发出声音"方法

9310

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

前者通常将其定义为虚函数virtual,当我们使用指针或者引用调用虚函数时,该调用将被动态绑定 任何构造函数之外非静态函数都可以是虚函数 如果把一个函数声明成虚函数,那么该函数派生类隐式地也是虚函数...(但不总是)覆盖它集成虚函数,如果没有覆盖的话,则该虚函数行为类似于其他普通成员,派生类会直接继承其版本 派生类可以它覆盖函数前适用virtual关键字,但不是非得这么 C++11...尽管从语法上来说我们可以派生类构造函数体内给它共有或受保护成员赋值,但最好不要这么。 2.3 继承与静态成员 如果定义了一个静态成员,则在整个继承体系只存在该成员唯一定义。...一般情况下派生类虚函数返回类型是本身指针引用时,上述规则无效。比如D由B派生而来,则虚函数可以返回B*而派生类对应函数可以返回D*。...(15) << endl; 当我们希望容器存放具有继承关系对象时,实际上存放通常是指针更好选择是智能指针): Q:这里为什么要使用智能指针,涉及到动态内存申请了?

1.2K20

C++基础-多态

分析上述例程: 派生类对象可以赋值给对象(这里对象是广义称法,代指对象、指针引用),例程中使用引用指针指向派生类对象 如果 Swim() 不是虚函数,那么无论引用(或指针)指向何种类型对象...这种情况使用了多态机制 使用指针引用指向派生类对象,运行时调用对象所属(具有继承层次关系派生类)方法,这就是多态。...从打印可以看出,VFT 指针为 _vptr.Base,派生类 VFT 指针存在在派生类 Base 部分,可以认为派生类 VFT 指针覆盖了 VFT 指针,指向自己虚函数表。 4....纯虚函数和抽象 C++ ,包含纯虚函数是抽象。抽象用于定义接口,派生类实现接口,这样可以实现接口与实现分离。抽象不能被实例化。...虚函数,要给出实现,派生类可实现可不实现,即派生类需要覆盖虚函数 普通函数,要给出实现,派生类可实现可不实现。

83620

ue4 弱指针_智能指针如何实现自动释放

大家好,又见面了,我是你们朋友全栈君。 原创文章,转载请注明出处。 UE4也有一套智能指针库,整理了一下做个介绍。请大家补充。....h定义, 并且可以=nullptr ShareRef不允许.h定义, 并且一直有值,介绍 2>注意使用前要判断.IsValid()注意是....new出来原生上就有了AsShared方法,会存着一个这个共享引用。...不能用派生类接 //TSharedPtr ptr22 = pOriginPtr->AsShared(); } { //正确用法, AsShared()不能用接(指的是你继承...1>比如我们要写一个单例管理可以将数据上继承这个 2>有转换成原生需求,又想在某一处将原生C++再次转换成TSharedPtr需求 3.使用注意事项 1>错误用法, 能这么用,

1K30

【笔记】《C++Primer》—— 第三部分:设计者工具

每次继承一个就会在内存中生成一个子对象,存放了成员,正是因为这个原因派生类可以转换为 派生类构造函数需要负责所有成员初始化,尽管派生类可以初始化继承来成员,但是这不符合通常编码思路...如果表达式不是引用不是指针,则其动态类型永远与静态类型一致 派生类可以类型转换,而不能隐式反向转换 一个派生类函数如果想要覆盖继承来虚函数,那必须名称和形参都一致,否则编译器会认为这两个函数是独立...虚函数返回类型需要与一致,除非虚函数返回类型是本身引用指针时为了多态性会有特例 如果想要保证某个虚函数一定会被覆盖,则可以在想要用来覆盖函数后面加上override关键字 函数后面加上...因此除了重载虚函数外最好不要让名称同名 派生类可以覆盖重载函数,但是如果派生类希望重载几个函数都在派生类可见的话:一种方法是不覆盖任何一个重载函数或将所有重载函数都进行一次覆盖;另一种方法是为需要重载函数名使用...,这些实参不会被继承,而是派生类会得到多个继承构造函数,每个构造函数省略一个有默认实参形参 当我们想要把继承体系对象存放到容器时,最好使用间接存储也就是存放指针(智能指针更好了) 16

1.7K10

继承

和继承 面向对象编程主要目的之一就是提供可以重复使用代码,减少开发周期,提高开发效率。 继承可以完成一些工作已有基础上添加功能。 给添加新数据成员。 可以修改方法行为。...派生类之间关系: 派生类对象可以使用(公有的)方法指针可以不进行显示类型转换情况下指向派生类对象,但只能调用方法。...引用可以不进行显示类型转换情况先引用派生类对象,但只能调用方法。 2....且该转换是可以传递,例如A,其派生类AP,AP派生类APP,则A指针引用可以指向或引用AP对象和APP对象。 相反,我们将指针引用转换为派生类指针引用称为向下强制转换。...因此,如果要重新定义继承方法,则应确保与原来原型完全相同,但是如果返回类型是引用指针,则可以修改为指向派生类引用指针,即允许返回类型随类型变化而变化,这种特性被称为返回类型协变。

68620

派生类多态虚函数?

根据引用指针所绑定对象类型不同,该调用可能执行版本,可能执行某个派生类版木,通过在其成员函数声明语句之前加上关键字virtual使得该函数执行动态绑定。...任何构造函数之外非静态函数都可以是虚函数。 关键字virtual只能出现在内部声明语句之前而不能用于外部函数定义。 如果把一个函数声明成虚函数,则该函数派生类也是虚函数。...派生类可以继承定义成员,但是派生类成员函数不一定有权访问从继承而来成员。 和其他使用代码一样,派生类能访问公有成员,而不能访问私有成员。...此外,我们能将公有派生类对象绑定到引用指针上。 大多数都只继承一个,这种形式继承被称作“单继承”。 派生类虚函数派生类经常(但不总是)覆盖它继承虚函数。...如果派生类没有覆盖其某个虚函数,则该虚函数行为类似于其他普通成员,派生类会直接继承其版本,派生类可以它覆盖函数前使用virtual关键字,但不是非得这么(可有可无)。

14720

闭关多日,整理一份C++那些重要又容易忽视细节

返回引用时,应避免返回函数终止时不再存在内存单元引用指针里说过同样的话)。 为避免这种问题,最简单方法就是:返回一个作为参数传递给函数引用。 ---- 何时使用引用参数? 想用时候呗。...未来,这些前篇一律基本代码,已经并不局限与本科生,专科生可以,甚至高中生都可以。而某些本科生,还高人一等姿态。...,这时只会看p所赋值对象,如果p赋值对象是派生类对象,就会调用派生类析构函数(毫无疑问,在这之前会先调用构造函数,调用派生类构造函数,然后调用派生类析构函数,析构函数,所谓先构造后释放...---- 虚函数工作原理 通常,编译器处理虚函数方法是:给每个对象添加一个隐藏成员。隐藏成员中保存一个指向函数地址数组指针。...虚函数表存储了为对象进行声明虚函数地址。 例如,对象包含一个指针,该指针指向中所有虚函数地址表。派生类对象包含一个指向独立地址表指针

57710

C++基础(七).多态(2)

x; } class Circle:public Shape //定义一个继成Shape抽象派生类Circle { public: Circle(float r=0); //构造方法 float...:通过重载函数实现 ;运行时多态性:通过虚函数实现) 虚函数 :中被声明为virtual,并在派生类重新定义成员函数,可实现成员函数动态覆盖(Override) 纯虚函数:纯虚函数是声明虚函数...,它在没有定义,但要求任何派生类都要定义自己实现方法。...实现纯虚函数方法函数原型后加“=0” 抽象:包含纯虚函数称为抽象。...然而可以有抽象类型指针引用可以作为参数,同样抽象指针引用可以作为函数返回值类型。因为他们可以指向或者引用抽象子类对象 纯虚函数是子类里面被实现

40310

【c++】继承学习(一):继承机制与派生类转换

通过这种方式,子类和父形成了一种层次结构,允许更高层次代码重用和泛化 例如下面的例子: 父包含一些通用属性,人名和年龄,派生类继承但具有不同额外特性或方法 class Person...继承,因为protetced/private继承下来成员都只能在派生类里面使用,实际扩展维护性不强 2.派生类对象赋值转换 派生类对象可以赋值给对象 / 指针 / 引用...切片过程派生类对象部分(通常是额外添加成员变量和方法)会被忽略,只有定义部分会被复制到对象。...使用引用指针时,这种情况并不会发生 对象不能赋值给派生类对象 指针或者引用可以通过强制类型转换赋值给派生类指针或者引用。但是必须是指针是指向派生类对象时才是安全。...如果在派生类尝试访问一个被隐藏成员,需要显式地使用名限定符来指定成员。 Print 方法中使用 Person::_num 来访问 Person _num 成员。

29910

C++面试知识总结

链接阶段:例如,某个源文件函数可能引用了另一个源文件定义某个函数;程序可能调用了某个库文件函数。 1.5 预编译 定义:预编译又称为预处理 , 是做些代码文本替换工作。...多态:通过继承同一个,产生了相关不同派生类,与同名成员函数不同派生类中会有不同实现,也就是说:一个接口、多种方法。...覆盖和隐藏区别: 派生类函数与函数同名,但是参数不同。此时,不论有无virtual关键字,函数将被隐藏。 派生类函数与函数同名,参数相同。...,派生类成员函数可以访问公有和受保护成员;公有继承时受保护成员,可以通过派生类对象访问但不能修改。...私有继承时,成员只能被直接派生类成员访问,无法再往下继承。 受保护继承时,成员只被直接派生类成员访问,无法再往下继承。

1.7K41

第 15 章 面向对象程序设计

如果派生类没有覆盖其某个虚函数,则该虚函数行为类似于其他普通成员,派生类会直接继承其版本。 派生类可以它覆盖函数前使用 virtual关键字,但不是非得这么。...正是因为派生类对象中含有与其对应组成部分,所以能把派生类对象当成对象来使用,因此能将指针引用绑定到派生类对象部分上。这种转换叫做派生类类型转换。...即使一个指针引用已经绑定在一个派生类对象上,不能执行从派生类转换。可以使用 dynamic_cast执行运行时安全检查或 static_cast来强制覆盖掉编译器检查工作。...友元访问派生类成员时不具特殊性,类似的,派生类友元不能随意访问成员。但是友元是可以访问内嵌派生类对象成员。...此时,更好做法是容器存放(智能)指针

1K30

【C++】继承

private成员 private成员 派生类不可见 派生类不可见 派生类不可见 表格内容可以概述为:私有成员子类都不可见,其他成员子类访问方式等于成员访问权限与继承方式取较小值...---- 二、派生类对象赋值 继承关系派生类对象可以直接赋值给对象/指针/引用,而不产生类型转换。...如图所示:派生类对象赋值给对象时是直接将派生类属于那一部分切割给引用指针也是一样,引用派生类属于那一部分成员别名,指针指向派生类属于那一部分。.../指针/引用,而不产生类型转换” 是什么意思了 – 派生类对象赋给对象时中间不会参数临时变量,所以对象可以直接引用/指向派生类对象,而不需要使用 const 修饰。...;(即只能向上转,不能向下转) 2、指针或者引用可以通过强制类型转换赋值给派生类指针或者引用

85500

多态

变量多态是指:类型变量(对于C++是引用指针可以被赋值类型对象,可以被赋值派生类对象。...动态多态 通过引用派生类来调用派生类函数实现 经典c++多态使用方式,利用继承和虚函数实现,属于c++面向对象集大成应用,结合了变量多态和函数多态。...c++动态多态 实现原理 c++,每个拥有虚函数都有一个虚表,虚表存储虚函数到实际执行函数映射。每一个实例化带有虚函数对象,在其内存地址起始位置存放指向虚表指针。...当对象调用虚函数时,通过该指针找到对应虚表,通过查找虚表去执行实际函数。 所以当一个指针(或引用)指向派生类对象时,并没有修改派生类内存,起始位置依然存放是指向派生类虚表指针。...这时就可以利用一个vector对所有动物进行记录(变量多态),可以进行动态增减,固定时间对每个实例调用feed()方法进行投喂,每个派生类有自己feed()方法实现(函数多态)

52480

必知必会之C++多态机制

具体来说,多态性允许指针引用在运行时指向派生类对象,并且根据对象实际类型来调用相应成员函数。 多态性是通过虚函数来实现。...派生类重写虚函数: 派生类可以通过重写(覆盖)虚函数来提供自己实现。调用这个虚函数时,会根据对象实际类型来决定调用哪个版本函数。...unsetunset父指针指向子类对象unsetunset C++ 可以使用父指针来指向子类对象,这是实现多态一种常见方式。...方法调用 C++ ,如果父通过指针引用调用一个虚函数,而这个虚函数子类中被重写(override),那么调用实际方法将取决于指针引用所指向对象类型。这就是多态体现。...具体来说,如果父指针引用指向是子类对象,那么调用方法将是子类重写版本;如果指针引用指向是父对象,那么调用方法将是父版本。

10610

QT(C++)面试总结

3)公有派生类对象可以被当作对象使用,反之则不可。 派生类对象可以隐含转换为对象; 派生类对象可以初始化引用派生类指针可以隐含转换为指针。...通过对象名、指针只能使用从继承成员,派生类新增成员就不能使用了 Qt4与Qt5三个区别 1.新增widgets模块 Qt4,Qt提供全部图形界面相关都包含在Qt Gui模块...多态:同一操作作用于不同对象,可以有不同解释,产生不同执行结果。在运行时,可以通过指向指针,来调用实现派生类方法。...C++,实现多态有以下方法:虚函数,抽象,覆盖,模板(重载和多态无关)。 C++ (纯虚函数和抽象) a. 纯虚函数是一个只有声明虚函数,无定义。...class可以继承struct修饰;同时,struct可以继承class修饰,继承属性如下列描述: class A{}; class B:A{}; // private 继承 struct

1.9K10

CC++面试常问题集(2)

因此,创建子类对象时,为了初始化从父继承来数据成员,系统需要调用其父构造方法。 二,析构函数  析构函数不会被子类继承,只是子类析构函数中会调用父析构函数。...假设采用是非虚析构函数,当删除指针指向派生类对象时就不会触发动态绑定,因而只会调用析构函数,而不会调用派生类析构函数。...核心理念就是通过访问派生类定义函数。它提供了一种接口界面。允许派生类虚函数重新定义。由多态方式调用时候动态绑定。...就是指针引用有可能指向不同派生类对象,对于非虚函数,执行时实际调用该函数对象类型即为该指针引用静态类型(类型);而对于虚函数,执行时实际调用该函数对象类型为该指针引用所指对象实际类型...8)指针引用增(++)运算意义不一样;引用增被引用对象值,指针增内存地址。

1.1K10

C++设计注意事项

定义派生类赋值操作符重载函数时,要显式地函数块通过::来调用赋值操作符,来操作成员,毕竟派生类很多时候无法直接访问到成员,只能通过调用公开方法来访问,而且不能通过初始化列表方式来调用...虚函数 前面提高过,用virtual修饰一个函数原型可以令其变成虚函数(虚方法)。只需要在原型时修饰,定义不用再次修饰。 用virtual修饰虚函数,派生类会自动成为虚函数。...虚函数意义是当用指针引用指向对象时(不管指向对象还是派生类对象),调用虚函数会根据对象真实类型调用对应方法。...调用派生类方法,如果不用virtual修饰,则调用方法 当然,如果要能做到分开调用,派生类也要一模一样定义一个方法(参数列表要一致),此时用virtual修饰与否都可以,毕竟已经修饰过了...所有要在派生类重定义方法都建议中用virtual修饰,以防出错。

37820

《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)「建议收藏」

可以派生类内完成以下几种功能: 可以增加新数据成员和成员函数 可以成员进行重定义 可以改变成员派生类访问属性 成员派生类访问属性 派生类可以继承除了构造函数与析构函数之外成员...如果派生类也是一个派生类,每个派生类只需负责其直接数据成员初始化,依次上溯。 ~ 5.3 调整成员派生类访问属性其他方法 派生类可以声明与成员同名成员。...派生类对象之间存有赋值兼容关系,派生类对象之间赋值兼容规则是指在需要对象任何地方,都可以用子类对象代替。...必须首先在定义虚函数; 派生类声明虚函数进行重新定义时,关键字virtual可以可以不写。...可以声明指向抽象指针引用,此指针可以指向它派生类,进而实现多态性。 如果派生类没有定义纯虚函数实现,而派生类只是继承纯虚函数,则这个派生类仍然是一个抽象

3.1K40
领券