草庐IT

c++ - 在C++中将派生类指针分配给基类指针

我有关注classbase{};classderived:publicbase{public:derived(){}voidmyFunc(){cout现在我有base*pbase=newderived();pbase->myFunc();我收到错误myFunc不是base的成员函数。如何避免这种情况?以及如何让myFunc被调用?注意我应该让基类不包含函数,因为它是设计的一部分,上面的代码是大函数的一部分 最佳答案 如果您坚持认为此函数不应成为base的一部分,那么您只有2个选择。要么使用指向派生类的指针derived*pDeriv

c++ - C++ 中是否有一种机制可以在没有动态内存分配的情况下从基类指针复制派生类的完整拷贝?

考虑以下示例,其中对象切片发生在基指针的取消引用期间。#includeclassBase{public:virtualvoidhello(){printf("helloworldfrombase\n");}};classDerived:publicBase{public:virtualvoidhello(){printf("helloworldfromderived\n");}};intmain(){Base*ptrToDerived=newDerived;autod=*ptrToDerived;d.hello();}我希望变量d保存类型为Derived的对象,而不是类型为Base的对

c++ - 如何强制所有派生类实现虚方法?

假设您有一个类树的基类Dep。有一个虚拟方法Dep*Dep::create()我希望每个叶类都实现它。有什么办法可以强制执行此操作吗?注意:这里的问题是可能有中间类(比如classB:publicA:publicDep)通过以下方式实现此方法(A::create)意外或因为他们认为他们是叶类,但实际上他们自己是子类。问题到此结束。上下文如果你好奇我为什么需要这个;我有一个Master类,它具有未知具体类型的Dep对象。如果Master是重复的,我需要拿出Dep实例的匹配克隆。下一个最好的办法是虚拟构造函数惯用语,它恰好引入了这个问题。此外,我什至无法捕捉到这一点(除了可怕的崩溃),因为

c++ - 如何在不重写代码的情况下实例化派生类?

假设我有一个:classA{A(inti);};classB:A{};例如,我无法实例化B(3),因为未定义此构造函数。有没有一种方法可以实例化一个使用A构造函数的B对象,而不必在所有派生类中添加“琐碎”的代码?谢谢谢谢 最佳答案 C++11有一个方法:classA{public:A(inti);};classB:A{public:usingA::A;//useA'sconstructors}; 关于c++-如何在不重写代码的情况下实例化派生类?,我们在StackOverflow上找到一

c++ - 对派生类的 undefined reference

编辑:与c++undefinedreferenceto`vtable有关我正在尝试做一个关于继承的项目,但我遇到了这个错误:/tmp/ccw1aT69.o:Infunction`main':main.cpp:(.text+0x15):undefinedreferenceto`Derived::Derived(int)'/tmp/ccw1aT69.o:Infunction`Derived::~Derived()':main.cpp:(.text._ZN20DerivedD2Ev[_ZN20DerivedD5Ev]+0x13):undefinedreferenceto`vtableforD

c++ - 现代编译器能否优化表达式派生自函数的常量表达式?

据我了解,现代C++编译器在以下方面采用了捷径:if(true){dostuff}但是像这样的东西怎么样:boolfoo(){returntrue}...if(foo()){dostuff}Or:classFunctor{public:booloperator()(){returntrue;}}...Functorf;if(f()){dostuff} 最佳答案 这取决于编译器是否可以在同一编译单元中看到foo()。启用优化后,如果foo()与调用者在同一个编译单元中,它可能会内联对foo()的调用,然后简化优化与之前相同的if(tr

c++ - 转储 QObject 派生对象的所有属性

如何转储Qt对象的所有属性?用于调试目的,例如在分析工厂返回的对象时。 最佳答案 从QObject派生的对象的属性通过Qt的注册元对象系统。因此,它可以用来反省它们,即列出所有属性和他们的内容,例如:#include#include#include#include#includestaticvoiddump_props(QObject*o){automo=o->metaObject();qDebug()className()>v;v.reserve(mo->propertyCount()-mo->propertyOffset());

c++ - 在 C++ 中,是否允许将函数指针转换为一个函数指针,该函数指针作为参数获取一个指向基类或派生类的指针?

以下是否会按预期工作?structA{};structB:publicA{intx;};voidf(B*o){std::coutx(f)(&b);} 最佳答案 强制转换后使用此类指针的未定义行为:Anypointertofunctioncanbeconvertedtoapointertoadifferentfunctiontype.Callingthefunctionthroughapointertoadifferentfunctiontypeisundefined,butconvertingsuchpointerbacktopoi

c++ - 派生和破坏封装,还是违反 DRY?

我有两个C++类:Sequence,就像std::vector和File,它是一个表示机器上文件的字符串序列。从Sequence派生File是很容易的事。它的行为完全相同,但增加了读写文件的功能。File特定的功能很容易实现,无需将Sequence的数据成员标记为protected。相反,它们可以是私有(private)的,File可以使用Sequence的公共(public)接口(interface)。到处都是快乐的时光。我想创建一个Array类,在内部管理动态分配的内存。Array对象不能调整大小;大小在构造函数中指定。*这就是事情变得有争议的地方。从概念上讲,从Array派生Se

c++ - 具有虚函数的类,当派生自 QObject 时,会导致链接错误

下面是运行良好的代码classHttpService{public:virtual~HttpService();//implementedin.cppprotected:HttpService(structMHD_Connection*conn){}};classHttpFileService:publicHttpService{public:virtual~HttpFileService();//implementedin.cppprotected:HttpFileService(structMHD_Connection*conn):HttpService(conn){}};现在,当