草庐IT

参数中的 C++ 协方差

我想知道为什么C++不支持像下面示例中的参数协方差,或者是否有办法实现它?classbase{public:virtualbase*func(base*ptr){returnnewbase();}};classderived:publicbase{public:virtualderived*func(derived*ptr)override{returnnewderived();}//notallowed}; 最佳答案 返回类型是允许的,因为derived继承自base,但函数参数不能工作-并非所有base实例都会derived也是

参数中的 C++ 协方差

我想知道为什么C++不支持像下面示例中的参数协方差,或者是否有办法实现它?classbase{public:virtualbase*func(base*ptr){returnnewbase();}};classderived:publicbase{public:virtualderived*func(derived*ptr)override{returnnewderived();}//notallowed}; 最佳答案 返回类型是允许的,因为derived继承自base,但函数参数不能工作-并非所有base实例都会derived也是

c++ - 编译器找不到在基类中实现的虚函数

我遇到一种情况,编译器似乎没有找到与另一个成员函数同名的虚函数的基类定义/实现。structOne{};structTwo{};structBase{virtualvoidfunc(One&);virtualvoidfunc(Two&)=0;};structDerived:publicBase{virtualvoidfunc(Two&);};voidBase::func(One&){}voidDerived::func(Two&){}//elsewherevoidthis_fails_to_compile(){Oneone;Derivedd;d.func(one);}我使用的是Visu

c++ - 编译器找不到在基类中实现的虚函数

我遇到一种情况,编译器似乎没有找到与另一个成员函数同名的虚函数的基类定义/实现。structOne{};structTwo{};structBase{virtualvoidfunc(One&);virtualvoidfunc(Two&)=0;};structDerived:publicBase{virtualvoidfunc(Two&);};voidBase::func(One&){}voidDerived::func(Two&){}//elsewherevoidthis_fails_to_compile(){Oneone;Derivedd;d.func(one);}我使用的是Visu

c++ - 常见问题解答 : Why does dynamic_cast only work if a class has at least 1 virtual method?

这在C++中无法编译:classA{};classB:publicA{};...A*a=newB();B*b=dynamic_cast(a); 最佳答案 因为dynamic_cast只能向下转换多态类型,所以标准这么说。您可以通过向基类添加virtual析构函数来使您的类具有多态性。事实上,你可能应该无论如何(见脚注)。否则,如果您尝试通过A指针删除B对象,您将调用UndefinedBehavior.classA{public:virtual~A(){};};瞧!脚注关于在多态类型中需要虚拟析构函数的“规则”有一些异常(except

c++ - 常见问题解答 : Why does dynamic_cast only work if a class has at least 1 virtual method?

这在C++中无法编译:classA{};classB:publicA{};...A*a=newB();B*b=dynamic_cast(a); 最佳答案 因为dynamic_cast只能向下转换多态类型,所以标准这么说。您可以通过向基类添加virtual析构函数来使您的类具有多态性。事实上,你可能应该无论如何(见脚注)。否则,如果您尝试通过A指针删除B对象,您将调用UndefinedBehavior.classA{public:virtual~A(){};};瞧!脚注关于在多态类型中需要虚拟析构函数的“规则”有一些异常(except

java - C++:使用抽象方法创建抽象类并覆盖子类中的方法

如何在C++中创建一个带有一些我想在子类中覆盖的抽象方法的抽象类?.h文件的外观应该如何?有没有.cpp,如果有,应该怎么看?在Java中它看起来像这样:abstractclassGameObject{publicabstractvoidupdate();publicabstractvoidpaint(Graphicsg);}classPlayerextendsGameObject{@Overridepublicvoidupdate(){//...}@Overridepublicvoidpaint(Graphicsg){//...}}//Inmygameloop:Listobjects

java - C++:使用抽象方法创建抽象类并覆盖子类中的方法

如何在C++中创建一个带有一些我想在子类中覆盖的抽象方法的抽象类?.h文件的外观应该如何?有没有.cpp,如果有,应该怎么看?在Java中它看起来像这样:abstractclassGameObject{publicabstractvoidupdate();publicabstractvoidpaint(Graphicsg);}classPlayerextendsGameObject{@Overridepublicvoidupdate(){//...}@Overridepublicvoidpaint(Graphicsg){//...}}//Inmygameloop:Listobjects

c++ - gcc Woverloaded-虚拟警告

我认为以下C++代码是正确的,但在使用“-Woverloaded-virtual”编译时会产生一些警告,是警告是假的还是此代码存在真正的问题?如果这是一个虚假警告,我可以做些什么来避免它,定义所有异常虚拟变体派生的摆脱警告,但也许是一个更好的解决方案G++命令:g++-c-Woverloaded-virtualtest.cpptest.cpp:22:18:warning:‘virtualvoidintermediate::exception(constchar*)’washidden[-Woverloaded-virtual]test.cpp:32:18:warning:by‘virt

c++ - gcc Woverloaded-虚拟警告

我认为以下C++代码是正确的,但在使用“-Woverloaded-virtual”编译时会产生一些警告,是警告是假的还是此代码存在真正的问题?如果这是一个虚假警告,我可以做些什么来避免它,定义所有异常虚拟变体派生的摆脱警告,但也许是一个更好的解决方案G++命令:g++-c-Woverloaded-virtualtest.cpptest.cpp:22:18:warning:‘virtualvoidintermediate::exception(constchar*)’washidden[-Woverloaded-virtual]test.cpp:32:18:warning:by‘virt