Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回与C+中的类相同的类型+; 我希望有一个C++类方法返回对同一个类对象的引用。这也适用于派生类。在下面的示例中,我简单地将“A*”作为函数的返回类型,但在使用类B时,这显然是一个问题 class A { public: A* self() { return this; }; }; class B: public A { }; int main(int argc, char **argv) { A* a1 = new A; B* b1 = new B; A* a2 = a1->self(); B* b2 = b1->self(); }_C++ - Fatal编程技术网

返回与C+中的类相同的类型+; 我希望有一个C++类方法返回对同一个类对象的引用。这也适用于派生类。在下面的示例中,我简单地将“A*”作为函数的返回类型,但在使用类B时,这显然是一个问题 class A { public: A* self() { return this; }; }; class B: public A { }; int main(int argc, char **argv) { A* a1 = new A; B* b1 = new B; A* a2 = a1->self(); B* b2 = b1->self(); }

返回与C+中的类相同的类型+; 我希望有一个C++类方法返回对同一个类对象的引用。这也适用于派生类。在下面的示例中,我简单地将“A*”作为函数的返回类型,但在使用类B时,这显然是一个问题 class A { public: A* self() { return this; }; }; class B: public A { }; int main(int argc, char **argv) { A* a1 = new A; B* b1 = new B; A* a2 = a1->self(); B* b2 = b1->self(); },c++,C++,编译器抱怨 class.cpp:在函数“int main(int,char**)”中:class.cpp:16:错误: 从“A*”到“B*”的转换无效 在Objective-C中,我会使用 特殊类型作为返回类型。是否有类似的C++语言或任何已知的模式用于此类问题? < P>转换确实无效。对于此类转换,您需要强制转换: B* b2 = static_cast<B*>( b1->self() ); B*b2=static_cast(b1->self()); 但正确的方法是尽量避

编译器抱怨

class.cpp:在函数“int main(int,char**)”中:class.cpp:16:错误:
从“A*”到“B*”的转换无效

在Objective-C中,我会使用
特殊类型作为返回类型。是否有类似的C++语言或任何已知的模式用于此类问题?

< P>转换确实无效。对于此类转换,您需要强制转换:

B* b2 = static_cast<B*>( b1->self() );
B*b2=static_cast(b1->self());

但正确的方法是尽量避免陷入这种情况,无论是通过适当的设计还是重构。

转换确实是无效的。对于此类转换,您需要强制转换:

B* b2 = static_cast<B*>( b1->self() );
B*b2=static_cast(b1->self());
但正确的方法是尽量避免陷入这种情况,无论是通过适当的设计还是重构。

我想你需要(注意
virtual
):

<>你也可以考虑 此语言功能专门针对具有并行类层次结构的情况引入(
clone
是特例)

我想您需要(注意
virtual
):

<>你也可以考虑
此语言功能专门针对具有并行类层次结构的情况引入(
clone
是特例)

动态强制转换在这里有效吗?您正在尝试将B*设置为a*。是否希望self返回一个B*?简短的回答是否。函数有一个单一的固定类型;当类从中派生时,其类型不能更改。@Ben:是的,B->self()应该返回指向B的指针。这是什么意思
a1->self()
将返回指向
a1
的指针,您仍然可以使用该指针。与您尝试的解决方案相比,实际问题是什么?您正在试图找到一种方法来检查派生类类型吗?动态强制转换在这里有效吗?您正在尝试将B*设置为a*。是否希望self返回一个B*?简短的回答是否。函数有一个单一的固定类型;当类从中派生时,其类型不能更改。@Ben:是的,B->self()应该返回指向B的指针。这是什么意思
a1->self()
将返回指向
a1
的指针,您仍然可以使用该指针。与您尝试的解决方案相比,实际问题是什么?你想找出一种检查派生类类型的方法吗?但是,在B中重新实现相同的功能会遇到重复的代码,我试图阻止它。在C++中你不能避免这一点。在其他语言中工作的ToBasas-ULLLE习语可能不是C++中的最佳实践。在您的示例中,为什么需要这种“自我”操作?我猜您正在尝试实现一些基于动态类型的条件逻辑。在C++中,人们通常使用虚拟函数来实现。@ ALTEXBASE函数有一个静态映射,所有的实例化对象都可以由(Base)类的属性来搜索。当这个搜索在子类上完成时,我希望它返回一个子类。但是,在B中重新实现相同的功能会导致重复的代码。我试图阻止它。在C++中,你不能避免这个。@在其他语言中运行良好的ToBasim-ULLL习语可能不是C++中的最佳实践。在您的示例中,为什么需要这种“自我”操作?我猜您正在尝试实现一些基于动态类型的条件逻辑。在C++中,人们通常使用虚拟函数来实现。@ ALTEXBASE函数有一个静态映射,所有的实例化对象都可以由(Base)类的属性来搜索。当这个搜索在子类上完成时,我希望它返回一个子类。这是我目前“解决”问题的方式,但我不喜欢它,并希望有一个更优雅的解决方案。这是我目前“解决”问题的方式,但我不喜欢它,并希望有一个更优雅的解决方案。