草庐IT

C++:虚拟继承

全部标签

c++ - 为什么我的虚拟方法没有被覆盖?

classBase{public:Base(){cout输出是:baseclassfunofbasederiveclassfunofderive为什么第二行不是derive的乐趣? 最佳答案 当您在基类构造函数中调用fun()时,派生类尚未构造(在C++中,首先构造一个构造的父类),因此系统没有实例尚未派生,因此Derived::fun()的虚函数表中没有条目。这就是为什么通常不赞成在构造函数中调用虚函数的原因,除非您特别想要调用虚函数的实现,该虚函数是当前正在实例化的对象的一部分或一个对象的一部分它的祖先。

手机虚拟ip地址怎么设置

手机是现代人生活中不可或缺的工具,它可以满足我们的通信、上网、聆听音乐等各种需求。然而,有时候我们需要给手机设置虚拟IP地址来完成特定的任务或工作上的要求。那么,手机怎么设置虚拟IP地址呢?我们需要了解什么是虚拟IP地址。那就要介绍一款产品深度ip转换器虚拟IP地址是一种在网络中映射到实际IP地址之上的地址,其可以用于网络负载均衡、故障转移等多种场景。设置手机的虚拟IP地址可以使我们在使用手机上网时,同时具备多个IP地址,从而实现更多的功能。设置手机虚拟IP地址的方法,会因手机操作系统的不同而有所区别。下面我们根据主流的手机操作系统进行介绍。对于Android系统的手机,我们可以打开手机设置里

[C++]继承

目录C++继承::                继承的概念及定义                        继承的概念                        继承的定义                        定义格式                        继承方式和访问限定符                        继承基类成员访问方式的变化                        默认继承方式                基类和派生类对象赋值转换                继承中的作用域                派生类的默认成员函数   

c++ - 如何知道函数何时必须是虚拟的?

在描述一个类时,如何知道什么时候函数必须是虚拟的?我知道虚函数是什么意思,但我就是想不通什么时候应该让它们成为虚函数谢谢 最佳答案 如果你想调用它们,函数应该是虚拟的polymorphically.换句话说,虚函数表示可以在子类中定制的行为。例如,考虑以下类:classCar{public:conststd::string&getId()const;virtualvoidstartEngine()=0;private:std::stringid;}每辆车都有一个Id,这里不允许自定义,因此没有必要将其虚拟化。子类不应该能够修改该属性

c++ - dynamic_cast 真的适用于多重继承吗?

我想看看是否可以创建“接口(interface)”,继承它们,然后在运行时检查是否有任何随机类实现了该接口(interface)。这是我的:structGameObject{intx,y;std::stringname;virtualvoidblah(){};};structAirholder{intoxygen;intnitrogen;};structTurf:publicGameObject,publicAirholder{Turf():GameObject(){name="Turf";}voidblah(){};};voidremove_air(GameObject*o){Air

C++多重继承函数合并

我有:classXILightSource{public:virtualXVec2position()const=0;};classXLightSprite:publicXSprite,publicXILightSource{};问题是XSprite已经有相同的函数position。我怎么能告诉编译器,我想使用XSprite::position函数作为XILightSource::position()的实现? 最佳答案 覆盖它并调用XILightSource::position():classXLightSprite:publicX

c++ - 构造函数和析构函数继承

我认为基类中的构造函数和析构函数不能被基类的派生类继承。我的理解对吗? 最佳答案 你的理解是正确的。例如,如果您有classBase{Base(inti){}};classDerived:publicBase{};Derivedd(3);这不会编译,因为Base构造函数不是继承的。请注意,如果可能,默认构造函数和复制构造函数由编译器创建,并调用基类的相应构造函数,因此对于这些构造函数,看起来好像它们是继承的。 关于c++-构造函数和析构函数继承,我们在StackOverflow上找到一个

c++ - 使用指向在结构内声明的字段的指针(又名 CONTAINING_RECORD 宏)计算指向整个结构的指针的可移植方法

例如,在Winnt.h中定义了众所周知的CONTAINING_RECORD()宏:#defineCONTAINING_RECORD(address,type,field)((type*)(\(PCHAR)(address)-\(ULONG_PTR)(&((type*)0)->field)))或在FreeBSD中:#defineCONTAINING_RECORD(addr,type,field)\((type*)((vm_offset_t)(addr)-(vm_offset_t)(&((type*)0)->field)))或在Linux中:#defineoffsetof(TYPE,MEM

c++ - 多重继承 : size of class for virtual pointers?

给定代码:classA{};classB:publicvirtualA{};classC:publicvirtualA{};classD:publicB,publicC{};intmain(){cout输出:sizeof(D)8每个类都包含自己的虚指针,但不包含其任何基类的虚指针,那么,为什么class(D)的Size是8? 最佳答案 这取决于编译器的实现。我的编译器是VisualStdioC++2005。代码如下:intmain(){cout会输出sizeof(B):4sizeof(C):4sizeof(D):8B类只有一个虚指针

c++ - 多重继承解决抽象类

假设我有4个类:classI{public:virtualvoidX()=0;};classA:publicvirtualI{public:virtualvoidX(){}};classB:publicI{};classC:publicA,publicB{};I,B和C是抽象的,其中A不是。如果我简单地添加virtual继承I对于B,然后A::X()解决I::X()在C.但是,我无法更改B的来源.我的问题:我能得到A::X()吗?解决I::X对于C无法更改B?我试过声明A和B虚拟到C无济于事。我试图没有冗余代码(例如让C声明X(){A::X();})。有什么巧妙的技巧吗?另外-有几个问