草庐IT

派生词

全部标签

使用派生类的 C++ 命名参数实现

我正在尝试为项目的某些类创建类似命名参数的构造函数。我这样做的方法是定义一个类代理,它将保存参数并将该代理的一个实例传递给我的类的构造函数。一切正常,直到我不得不派生我的一个类。基本上我想:我要从基类代理派生新的派生类代理。这也有效,但前提是我只使用派生的代理类参数。这里举个例子比较容易理解:classPerson{public:classPersonArgs{public:conststd::string&Name()const{return_name;}PersonArgs&Name(conststd::string&name){_name=name;return*this;}co

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++ - 是否有任何关键字可以在模板化派生类中重新定义模板化基类的 "all"方法?

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

c++ - 派生到基类转换

派生类和基类之间的转换在内部是如何发生的,编译器如何知道或存储对象的大小?例如在下面:classA{public:A():x(2){};private:intx;};classB:publicA{public:B():A(),y(5){};private:inty;};classC:publicB{public:C():B(),z(9){};private:intz;};intmain(){C*CObj=newC;B*pB=static_cast(CObj);deleteCObj;}编辑:一定是这样的:BBObj=static_cast(*CObj); 最佳

c++ - 帮助处理类和派生类

我正在处理一个使用基类“bankAccount”和两个派生类“checkingAccount”和“savingsAccount”的作业。我目前对我得到的输出感到困惑。所有期末余额都以负数结束。谁能看看我的代码,看看他们是否发现了为什么会这样?我假设我在派生类“checkingAccount”的处理函数中做错了什么。“savingsAccount”流程功能将是相似的我只是还没有做到,因为第一个不工作。谢谢!标题:#ifndefHEADER_H_INCLUDED#defineHEADER_H_INCLUDED#include#includeusingnamespacestd;classba

c++ - 派生类型可以与其基类的嵌套类型同名吗?

下面的代码合法吗?MSVC9和g++4.4不同意:structbase{structderived{};};structderived:base{};intmain(){typedefderived::derivedtype;return0;}MSVC提示,混淆了类型构造函数的嵌套名称:c:\dev>cltest.cppMicrosoft(R)32-bitC/C++OptimizingCompilerVersion15.00.30729.01for80x86Copyright(C)MicrosoftCorporation.Allrightsreserved.test.cpptest.c

c++ - 调用基础运算符而不是派生运算符 - 正常行为?

由于我目前正在使用C++,我遇到了一个问题。代码如下:#includeclassBase{public:virtual~Base(){}virtualBase&operator=(constBase&o){std::cout(b);//Derivedcalleda=d;//Derivedcalledc=d;//Derivedcalledreturn(0);}评论显示了我得到的输出。最后3个结果非常可预测,但我无法理解第一个。如第二个(static_cast)所示,当右操作数是基类时调用Derived::operator=。然而,g++(4.5.3-r2,gentooLinux)成功理解

c++ - 防止派生类从基类隐藏非虚函数

考虑我有A类和B类classA{public:voidFun();};classB:publicA{....};作为A类的设计者,有什么方法可以强制派生类B和派生自A的其他类被阻止(出现某种错误)隐藏非虚函数Fun()? 最佳答案 如果您希望非virtual成员函数始终可以通过某种方式访问​​,那么只需将其包装在命名空间范围内的自由函数中即可:namespacerevealed{voidfoo(A&o){o.foo();}}现在B类客户总是可以做voidbar(){Bo;revealed::foo(o);}然而,无论B类引入多少隐藏

c++ - 通过引用 C++ 中的基类循环遍历派生类

不好意思,如果之前有人问过这个问题,刚学C++,搜索了一下,不知道关键字是什么。可以这样做吗?classCar{public:voidaddColor(stringc){color=c;}private:stringcolor;}classHonda:publicCar{}classToyota:publicCar{}intmain(){vectorv;Honda*car1=newHonda();car1.addColor("green");Toyota*car2=newToyota();car2.addColor("blue");v.push_back(car1);v.push_ba

c++ - 自动向下转换指向派生对象的指针

早上好我有一个模板化类,我想通过指针vector来操作对象。要使用指向模板化类的指针vector,我需要从非模板化类派生此类,我做到了。这是我的问题:要从指向基类的指针调用派生类的方法,我不能使用虚函数,因为不能将模板函数设为虚函数。我需要进行显式转换,这很乏味:一旦使用new创建数字对象,实际上需要向下转换为number*,尽管该对象事先已知为数字。我以一种笨拙的方式解决了这个问题:函数myset测试所有支持的typeid值以获得正确的动态转换。它是执行typeid检查的一长串嵌套ifs。除了繁琐之外,该函数仅适用于调用'set'方法,并且应定义类似的函数以调用其他方法。如果我可以对