草庐IT

c++ - 为什么当我抛出派生类的对象时,基类的 catch block 会捕获异常?

这个问题在这里已经有了答案:WhyBaseClasscatchblockcatchderivedclassobject?(3个答案)Whythrowatderivedclasscatchesbybase?(5个答案)关闭5年前。如果我正在传递派生类的对象,那么应该调用派生类的catchblock。但是输出显示异常被基类捕获。为什么?#includeusingnamespacestd;classBase{};classDerived:publicBase{};intmain(){Derivedd;//someotherstufftry{//Somemonitoredcodethrowd;

c++ - std::unique_ptr 编译器错误:派生类的成员无法访问基类的私有(private)成员

我得到CompilerErrorC2248当我尝试编译以下代码时:#include#includeusingnamespacestd;classdata{public:staticdataparse(){datad;data::parse(d);returnd;}list>l;private:staticvoidparse(data&node){}};intmain(){return0;}为什么?我该如何解决这个问题?注意:我使用std::shared_ptr而不是std::unique_ptr没有问题。 最佳答案 您需要为您的类型

c++ - 派生类作为模板参数有什么用?

这个模式的目的是什么?这叫什么?第一次看到的时候觉得很奇怪,虽然现在已经看到很多次了。templatestructBase{//...};structExample:Base{//...}; 最佳答案 它叫做CuriouslyRecurringTemplate模式,并允许静态多态性。当您想向特定类添加功能,但希望该实用程序在一般情况下可用时,它很有用。通过使实用程序依赖于模板参数并使用模板参数,您可以同时实现这两者。 关于c++-派生类作为模板参数有什么用?,我们在StackOverfl

c++ - 派生类虚方法调用基类虚方法

在C++中-假设派生类派生自基类,并且基类中有一个虚拟方法被派生类覆盖。谁能告诉我一个现实生活场景,其中派生类版本的虚函数可能需要调用基类版本的虚函数?例子,classBase{public:Base(){}virtual~Base(){}virtualvoiddisplay(){cout 最佳答案 每当您还需要基类行为但不想(或不能)重新实现它时,您就会这样做。一个常见的例子是序列化:voidDerived::Serialize(Container&where){Base::Serialize(where);//nowserial

c++ - 强制派生类调用基函数

如果我从另一个派生一个类并覆盖一个函数,我可以通过在myFunc的实现中调用Base::myFunction()来调用基函数派生类。但是,有没有一种方法可以在我的Base类中定义在任何情况下都调用基函数,而无需在覆盖函数中显式调用它?(在派生函数执行之前或之后)或者甚至更好,如果我的虚拟Base类中有一个虚拟函数,以及两个已实现的私有(private)函数before()和after(),是否可以在Base类中定义,在调用这个Base类的任何派生类中的函数之前和之后,before()和after()会被调用吗?谢谢! 最佳答案 不,

c++ - 对派生对象的 C++ 虚函数调用是否通过 vtable?

在下面的代码中,它通过指向派生对象的指针调用虚函数foo。这个调用会通过vtable还是会直接调用B::foo?如果它通过一个vtable,让它直接调用B::foo的C++惯用方法是什么?我知道在这种情况下我总是指向B。ClassA{public:virtualvoidfoo(){}};classB:publicA{public:virtualvoidfoo(){}};intmain(){B*b=newB();b->foo();} 最佳答案 如果您启用了优化,大多数编译器都足够聪明,可以消除这种情况下的间接调用。但只是因为您刚刚创建

c++ - 为什么从指向基的指针到指向派生的指针的 static_cast 是 "invalid?"

所以我有这段代码:Node*SceneGraph::getFirstNodeWithGroupID(constintgroupID){returnstatic_cast(mTree->getNode(groupID));}mTree->getNode(groupID)返回一个PCSNode*。Node公开派生自PCSNode。我在static_cast上找到的所有文档都说明了这一点:“static_cast运算符可用于将指向基类的指针转换为指向派生类的指针等操作。”然而,XCode的(GCC)编译器说从PCSNode*到Node*的static_cast无效且不允许。这是什么原因?当我

objective-c - Xcode 如何从单个项目派生项目

我有四个不同的项目,它们仅在头文件和图标文件中有所不同。为了进行简单的更改,我必须在所有项目中都这样做。有什么办法可以结合这些项目?但我想要4个不同的应用程序。 最佳答案 你可以制作多个目标。在导航器中单击您的项目名称。在目标部分,复制您当前的目标。现在您可以在此目标中进行更改,例如更改图标、包名称。对于头文件,可以使用preprocessormacrostodothis我正在使用它制作一个应用程序的5个版本,它们仅在一个.h文件上有所不同。 关于objective-c-Xcode如何从

iphone - 当对象属性为只读且已计算(派生)时的 valueforkey

我在对计算的属性调用valueforkey方法时遇到问题。例如:@interfaceValue:NSObject@property(nonatomic,getter=toString,readonly)NSString*stringVal;-(NSString*)toString;@end当我调用[instanceOfValueClassvalueForKey:@"stringVal"]时,它说它不符合键值。确切消息是:[valueForUndefinedKey:]:此类对于键stringVal不符合键值编码。键值编码是否适用于派生属性?谢谢 最佳答案

iphone - MKMapViewDelegate派生类和委托(delegate)赋值

这可能更像是一个关于iOS的objective-c问题,但我看到了一些类似于下面的示例代码,我想更好地理解它们。@interfaceMyMapView:MKMapView{//ivarsspecifictoderivedclass}@property(nonatomic,assign)iddelegate;@end@implementationMyMapView-(id)initWithFrame:(CGRect)frame{self=[superinitWithFrame:frame];if(self){//initializetheivarsspecifictothisclass/