草庐IT

c++ - 继承和复制构造函数——如何从基类初始化私有(private)字段?

我有2个类,A和B。在A中,我有3个私有(private)字段。在B类中,我想编写一个复制构造函数,并从A类中初始化私有(private)字段。但是,这不起作用:#include#includeusingnamespacestd;classA{private:string*field1;string*field2;string*field3;doublenum1;public:A(string*o,string*n,string*m,doublea=0){field1=newstring(*o);field2=newstring(*n);field3=newstring(*m);num

c++ - 从基类的指针访问派生类的成员

我有一个从另一个派生的类,我使用一个基类指针数组来保存派生类的实例,但是因为数组是基类的,所以我无法使用指针访问属于派生类的成员符号,我是否可以使用简单的命令访问这些成员,或者我是否应该重写我的基类以定义成员并仅在派生类中使用它?例子:classA{public:intfoo;};classB:publicA{public:charbar;};classC:publicA{inttea;};intmain(){A*arr[5];arr[0]=newB;chartest=arr[0]->bar;//visualstudiohighlightsthiswithanerror"classAh

c++ - 为什么编译器在使用 CRTP 时看不到基类的方法

我有以下代码:structIface{virtualintRead()=0;intRead(intx){returnRead()+x;}};templatestructCrtp:publicIface{virtualintRead(){returnstatic_cast(*this).ReadImpl();}//usingIface::Read;};structIfaceImpl:publicCrtp{intReadImpl(){return42;}};intmain(){IfaceImplimpl;impl.Read(24);//compilationerrorIface&iface

c++ - 为什么派生类不能通过指向基类的指针访问其基类的 protected 成员?

这是code:classTestA{protected:inttest=12;public:TestA(){couttest;}~TestB(){}};intmain(){TestA*pTestA=newTestA();TestB*pTestB=newTestB(pTestA);}我正在尝试使用指向TestA类型对象的指针访问protected成员(因此,TestA的实例).TestB也派生自TestA为什么我无法访问它?它只能在我需要它的类(class)“内部”访问吗?不在外部使用指针/直接声明? 最佳答案 当public继承自基

c++ - Const 类型转换空基类

const_cast离开一个空基类并在其上调用非const方法是否是未定义的行为?例如classEmptyBase{public:voidbar(){...}};classSomething:publicEmptyBase{public:voidfoo()const{const_cast(static_cast(*this)).bar();}};我没能在标准(C++14和C++17)中找到相关信息来回答这个问题.. 最佳答案 它本身并不是UB。当您放弃常量并使用获得的泛左值修改最初声明为常量的对象时,您会得到未定义的行为。这是对此的

c++ - 在不知道类成员的情况下从基类实例创建派生类实例

这种情况有可能吗?classBase{intsomeBaseMemer;};templateclassDerived:publicT{intsomeNonBaseMemer;Derived(T*baseInstance);};目标:Base*pBase=newBase();pBase->someBaseMemer=123;//SomevaluesetDerived*pDerived=newDerived(pBase);pDerived->someBaseMemer的值应与pBase->someBaseMember相等,与其他基成员相似。 最佳答案

c++ - 从模板基类派生的类的隐式转换

我在隐式转换、模板和模板类继承方面遇到了问题。以下是我从我的项目中提取的内容,我省略了一些类甚至是抽象的,但这与大小写无关。classA{};classB:publicA{};templateclassBase{};classDerived:publicBase{};intmain(){Derivedd;Base*base=newDerived();}基本上,我有一个模板基类Base我得出Derived:publicBase从。然后我必须将它转换为最常见的Base形式,即Base.我原以为我可以转换一个派生自Base的对象至Base隐含地,作为B源自A.我做错了什么或者我怎么能隐式?这

c++ - 大型抽象基类

我正在编写一个包含30多个纯虚拟方法的大型抽象基类*。在实现类中查找要在基类中实现的所有函数有点乏味,主要是因为MSVC++不会告诉您您未能实现哪个函数并出现编译器错误“无法构造抽象类”"所以,我想知道我的大抽象基类是不是一个坏主意,或者我应该将它分成几个接口(interface),还是有一个编译器警告我可以激活它会告诉我我没有提供哪个方法实现...或者这只是抽象类编码的一部分,我应该习惯它。*它的作用是在几个不同的渲染子系统之间提供一层通用功能。 最佳答案 这个问题没有明显的正确答案。决定是否将基类分解为多个抽象基类可能应该是根据

对于指向同一基类的其他类的指针,C++11 非静态数据成员统一初始化失败

我是一名C老手,他试图通过将我的旧状态机框架从C移植到C++11来学习C++11。我的想法是为状态机本身创建一个类,然后为其中的状态创建一个嵌套类。状态可以是分层的,即超状态和子状态。框架需要了解状态的超状态,为此我在嵌套状态类中有一个指针(state*superstate)。我的问题是我打算通过直接在机器类中使用构造函数来设置超状态指针,这在C++11中应该是可能的,通过使用统一初始化进行非静态数据成员初始化。但由于某些原因,当设置为另一种类型的状态/类时,它无法编译(substateB3{superstateA})。但如果我稍后为此目的使用特定函数(set_superstate)设

c++ - 错误 C2504 - 基类未定义

我有一个很简单的问题这是我的firstcluster.h#pragmaonce#include"cluster.h"classFirstCluster:publicCluster{...public:...};cluster.h代码:#pragmaonce//File:cluster.hclassCluster{protected:...public:...};我收到错误:errorC2504:'Cluster':baseclassundefined有时我会收到此IntelliSense错误:IntelliSense:incompletetypeisnotallowed...Line1