草庐IT

c++ - 避免使用虚方法构造具有空基类的构造函数

我有一个带有虚函数的空基类。有什么方法可以避免手动实现Derived的构造函数以便能够对其进行初始化?structBase{virtualintf(int)const=0;virtual~Base()=0;};Base::~Base(){}structDerived:publicBase{intv;intf(int)constoverride{returnv;};};intmain(){returnDerived{5}.f(3);} 最佳答案 IsthereanywayIcanavoidmanuallyimplementingthe

c++ - 持有对 Derived 的引用的基类

我想这样做:structDerived;structBase{Derivedconst&m_ref;Base(Derivedconst&ref):m_ref(ref){}};structDerived:Base{Derived():Base(*this){}};但我似乎得到了不可靠的行为(稍后使用时,m_ref指向无效派生的事物)。是否允许在类初始化之前构造对Derivedfrom*this的引用?我知道在初始化之前使用这样的引用是无效的,但我不明白对类初始化的更改会如何影响对它的引用(自初始化以来它不会在内存中四处移动...)。我不确定如何称呼我正在尝试做的事情,所以我搜索这方面的信

c++ - "virtual base class in the case of multilevel inheritance"有意义吗

考虑以下显示多级继承的示例代码:案例1:这里类derived1是通过虚拟继承从类base派生的,类derived2是从类派生的直接类derived1。classbase{};classderived1:virtualpublicbase{};classderived2:publicderived1{};Case2:与Case1相同,只是不涉及虚拟继承classbase{};classderived1:publicbase//novirtualinheritance{};classderived2:publicderived1{};假设我在这两种情况下都创建了derived2类的对象。C

C++ - 方法和重载中的 const 关键字

为什么这个程序:#includeusingnamespacestd;classBase{public:Base(){coutfoo(12.0);base_ref.foo(7);base_ptr->bar(1.0);derived_ptr->bar(1.0);derived.bar(2);return0;}在调用base_ptr->bar(1.0);中调用Base::bar(double),而不是在derived_ptr->bar(1.0);被称为Derived::bar(double)const。我知道这是关于const关键字的,但我不明白为什么编译器会选择不同的重载函数。如果我删除c

c++ - 在模板中使用 typedef 和 typename

我想在模板类中定义一个类型名称,我可以在其他地方使用它来引用类中成员的类型。templateclassCA{public://typedeftypenameT::iteratoriterator_type;typedeftypenameTElementType1;//compileerroronthisline//typedefTElementType2;Tm_element;};并像这样使用它:templateclassCDerived:publicCBase{//...};并声明如下对象:typedefCDerivedMyNewClass;这不可能吗?我有一些代码可以在VS2010

c++ - 继承和显式构造函数?

考虑以下代码:templateclassBase{Base();Base(constBase&rhs);templateexplicitBase(constBase&rhs);template::value>::type>Base(constT0&rhs);explicitBase(conststd::string&rhs);};templateclassDerived:Base{Derived();Derived(constDerived&rhs);templateDerived(constT0&rhs):Base(rhs);//Isthereawayto"inherit"theex

c++ - 隐式构造函数可用于从 Base 派生的所有类型,但当前类型除外?

以下代码总结了我的问题:templateclassBase{};templateclassDerived1:publicBase{};templateclassDerived2:publicBase{public://CopyconstructorDerived2(constDerived2&x);//AnEXPLICITconstructorthatdoesaspecialconversionforaDerived2//withothertemplateparameterstemplateexplicitDerived2(constDerived2&x);//Nowtheproble

c++ - 在复制赋值运算符中分配基类成员

我有一个继承自MSFT类的类,因此无法更改,我希望派生类的复制构造函数和复制赋值运算符具有相同的行为。我遇到的问题是,在复制构造函数中,您可以自由地为初始化列表中的基类调用构造函数,但在运算符中,这不是一个选项。如何在赋值运算符中正确地重新创建此行为?仅在运算符重载的主体中调用基类的构造函数就足够了吗?附加说明:基类继承自CObject,它具有operator=()和复制构造函数作为私有(private)和未实现的方法,因此不幸的是,对这些方法的任何调用都会导致编译错误。我在下面提供了一个简化的代码场景:类声明:classBase{protected:intbaseInt;public

c++ - 在C++中模拟虚拟构造函数

在我的应用程序中,我必须从基类派生一些类,问题是我想强制派生类具有3个特定的构造函数实现。由于c++没有虚拟纯构造函数,这似乎很绝望(我不得不手动检查每个类的实现以确保实现了特定的ctors,这不是很有趣)。昨天我发现了一种模拟虚拟Actor行为的疯狂方法:templateclassAbstractEnforcer{protected:AbstractEnforcer(){}private:staticvoidEnforcer(){deletenewT();deletenewT(*(newunsignedint));deletenewT(*(newunsignedint,*(newQS

c++ - 如何将 Base 对象分配给 Derived 对象

我有一个关于C++的问题,如何将Base对象分配给Derived对象?或者如何将指向Base对象的指针分配给指向Derived对象的指针?在下面的代码中,两行是错误的。如何纠正?#includeusingnamespacestd;classA{public:inta;};classB:publicA{public:intb;};intmain(){Aa;Bb;b=a;//whathappend?coutb 最佳答案 将基对象分配给派生对象(或将基指针分配给派生指针)是没有意义的,因此C++将尽力阻止您这样做。异常(exception