草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 在派生类的基类构造函数中使用重写函数

我是C++编程的新手,所以我想编写一些简单的代码来熟悉语法。我暂时故意忽略了指针和引用。在编码过程中,我正在练习继承,我想创建一个代表一手牌的Hand类。基类有一个名为update()的函数,用于在构造时初始化“total”和“notation”属性。此外,可以使用add()函数将卡片添加到手中,该函数将卡片添加到手中并触发update()以适本地更新属性。#includeclassHand{public:std::vectorcards;inttotal;std::stringnotation;//Abbreviatednotationoftheobject//Constructor

c++ - 编译时基类指针偏移到派生类

classBase1{intx;};classBase2{inty;};classDerive:publicBase1,publicBase2{public:enum{PTR_OFFSET=((int)(Base2*)(Derive*)1)-1,};};但是编译器报错expectedconstantexpression除了编译器,大家都知道表达式值为4,哪里出了问题?那么如何在编译时获取偏移量呢? 最佳答案 解决您在提供的代码中看到的直接编译器错误,(Base2*)(Derive*)1在编译时很可能会变成reinterpret_ca

c++ - 在以抽象基类为参数的函数中将指针和赋值运算符与派生类一起使用

我有一个函数(modShape),它接受一个抽象基类(Shape)作为参数;在函数中,我想制作输入对象的拷贝,修改拷贝,然后将拷贝重新分配给输入对象,以便修改保留在modShape的范围之上。我已经设置了一个clone()成员函数来制作初始拷贝,它似乎运行良好。接下来,我使用doubleArea()成员函数修改拷贝,并尝试将其复制回输入对象。基类和派生类在header.h中定义:#ifndefHEADER_H_#defineHEADER_H_#include#includeusingnamespacestd;//Abstractbaseclass.classShape{public:/

c++ - 如何在没有确切类型信息的情况下从 void* 转换为虚拟基类?

这个问题在这里已经有了答案:Conversionfromvoid*tothepointerofthebaseclass(4个答案)关闭5年前。classA:publicX;classB:publicvirtualA;classC:publicvirtualA;classD1:publicB,publicC;classD2:publicB,publicC;void*p1=newD1;//afterstoringthepointers,void*p2=newD2;//therewillbenoexacttypeinfo.A*pA1=(A*)p1;//Cast1A*pA2=(A*)p2;X*

c++ - 通过对其基类的引用移动对象后,对象的状态是什么?

假设,有两个类的层次结构:classBase{};classFoo:publicBase{};像这样使用:Foofoo;Base&base=foo;Basemoved=std::move(base);在这样的移动之后foo处于什么状态?标准是否对此类代码有任何限制要求? 最佳答案 标准没有对不属于标准库的C++类的移动构造函数提出任何此类要求。图书馆作家可以自由地做他们想做的事。对于作为标准库一部分的组件,C++17标准确实说明了一些事情(强调我的)§20.5.5.15库类型的移出状态[lib.types.movedfrom]Obj

c++ - 私有(private)继承,返回对基类静态成员的引用

我有一个简单的问题,关于从一个私有(private)继承基类的类继承,即我们有classBase{};classHeir:privateBase{};classHeirsHeir:publicHeir{};了解HeirsHeir无法访问“其”Base的任何内容。特别是,它不能有返回对自身的Base&引用的方法。但为什么它不能返回对另一个Base对象的引用?那么为什么下面的代码不能编译:classBase{};classKid:privateBase{};Baseinstance;classGrandkid:publicKid{constBase&GetInstance()const{r

c++ 类设计、基类继承或门面设计模式

我有一个愚蠢的C++设计问题。有没有一种方法可以让一个类与多个类中的方法具有相同的方法名称(因此,具有相同的API)?我现在的情况是有课的情况structA{voidfoo(){std::cout我真正想要的是另一个类,它充当这些功能的接口(interface)。我可能会误解为一个简单接口(interface)的外观设计模式,它隐藏了上面实例化类的复杂性,但仍然使用它们相同的接口(interface)。structC{voidfoo(){...}voidboo(){...}voidmoo(){...}voidgoo(){...}};对于上面显示的少量方法,这可以通过声明结构A和B或将它

c++ - 基类的填充会被复制到派生类中吗?

最近,我一直在阅读“insidethec++objectmodel”。它说基类中使用的填充也应该复制到派生类中,以防你想将基类分配给派生类。于是,我在64位电脑下进行测试:classA{public:intvalA;chara;};classB:publicA{public:charb;};classC:publicB{public:charc;};intmain(){std::cout结果如下:812120x7ffd22c5072c0x7ffd22c507340x7ffd22c50735那么为什么C和B的大小一样呢?虽然貌似B用了A中的3字节padding。

c++ - 通过模板基类专门化模板

我正在编写一个模板,我试图为其提供一个类的特化,该类本身就是一个模板类。在使用它时,我实际上是用模板化类的衍生物实例化它,所以我有这样的东西:templatestructArg{staticinlineconstsize_tSize(constT*arg){returnsizeof(T);}staticinlineconstT*Ptr(constT*arg){returnarg;}};templatestructArg>{staticinlineconstsize_tSize(constWrap*arg){returnsizeof(T);}staticinlineconstT*Ptr(

c++ - 是否有任何关键字可以在模板化派生类中重新定义模板化基类的 "all"方法?

我知道这看起来是个愚蠢的问题,但是在C++中使用带有模板的面向对象的东西真的很麻烦。例如,Foo是基类:templateclassFoo{public:virtualvoidMethod1(){}virtualvoidMethod1(inta){}virtualvoidMethod2(){}virtualvoidMethod2(inta){}//...lotsofothermethods};是否有类似的东西:templateclassBar:publicFoo{public:usingFoo::*;//redefineallinheritedmethodsfromFoovirtualv