草庐IT

c++ - 我可以用纯虚拟函数覆盖虚拟函数吗?

我有三个类:B、D和G。D是B而G是D。B和D都是抽象的。B来自第三方。B有一个非纯虚方法,G需要实现(成为D)。我可以将虚函数重新定义/覆盖为纯虚函数吗?例子:classB//fromathirdparty{public:virtualvoidfoo();};classD:publicB{public:voidfoo()override=0;//allowedbygcc4.8.2virtualvoidbar()=0;};classG:publicD{public://forgottoreimplementfoovoidbar()override;};intmain(){Gtest;/

c++ - 我可以用纯虚拟函数覆盖虚拟函数吗?

我有三个类:B、D和G。D是B而G是D。B和D都是抽象的。B来自第三方。B有一个非纯虚方法,G需要实现(成为D)。我可以将虚函数重新定义/覆盖为纯虚函数吗?例子:classB//fromathirdparty{public:virtualvoidfoo();};classD:publicB{public:voidfoo()override=0;//allowedbygcc4.8.2virtualvoidbar()=0;};classG:publicD{public://forgottoreimplementfoovoidbar()override;};intmain(){Gtest;/

C++ 风格 : Prefixing virtual keyword to overridden methods

我一直在与我的同事讨论是否在被覆盖的方法前加上virtual关键字,或者只在原始基类中添加前缀。我倾向于在所有虚拟方法(即涉及vtable查找的方法)前面加上virtual关键字。我的理由有三个:鉴于C++缺少覆盖关键字,虚拟的存在关键字至少会通知您该方法涉及查找和理论上可以被覆盖进一步的特化,或可能是通过指向更高级别的指针调用基类。一直使用这种风格意味着,当你看到一个方法时(至少在我们的代码中)没有virtual关键字,你可以最初假设它既不是源自基础或专业在子类中。如果由于某些错误,virtual已从IFoo中删除,所有children仍然可以正常工作(CFooSpecializat

C++ 风格 : Prefixing virtual keyword to overridden methods

我一直在与我的同事讨论是否在被覆盖的方法前加上virtual关键字,或者只在原始基类中添加前缀。我倾向于在所有虚拟方法(即涉及vtable查找的方法)前面加上virtual关键字。我的理由有三个:鉴于C++缺少覆盖关键字,虚拟的存在关键字至少会通知您该方法涉及查找和理论上可以被覆盖进一步的特化,或可能是通过指向更高级别的指针调用基类。一直使用这种风格意味着,当你看到一个方法时(至少在我们的代码中)没有virtual关键字,你可以最初假设它既不是源自基础或专业在子类中。如果由于某些错误,virtual已从IFoo中删除,所有children仍然可以正常工作(CFooSpecializat

c++ - 重新定义和覆盖函数之间的区别

假设我有一个带有虚函数F()的类A:classA{virtualvoidF(){//Dosomething};};我还有另一个类B继承了A和重新定义F():classB:A{voidF(){//Dosomething};};还有一个不同的类C,它也继承了A但覆盖F():classC:A{voidF()override{//Dosomething};};B和C类中的F()有什么区别? 最佳答案 两者都是覆盖。当您使用关键字override时,如果它应该发生not是一个覆盖,则可以确保编译失败。这是个好习惯。

c++ - 重新定义和覆盖函数之间的区别

假设我有一个带有虚函数F()的类A:classA{virtualvoidF(){//Dosomething};};我还有另一个类B继承了A和重新定义F():classB:A{voidF(){//Dosomething};};还有一个不同的类C,它也继承了A但覆盖F():classC:A{voidF()override{//Dosomething};};B和C类中的F()有什么区别? 最佳答案 两者都是覆盖。当您使用关键字override时,如果它应该发生not是一个覆盖,则可以确保编译失败。这是个好习惯。

c++ - 虚拟显式转换运算符覆盖

我有一个类Base定义了一个explicitoperatorbool:structBase{virtualexplicitoperatorbool()const{returntrue;}};我有一个子类Derived,定义了一个operatorbool:structDerived:Base{operatorbool()constoverride{returnfalse;}};如您所见,Derived::operatorbool没有明确标记为explicit,而是标记为override,所以我希望编译器能够投诉。但是,gcc和clang似乎都同意这是有效的。我的期望不合理吗?此外,如果我

c++ - 虚拟显式转换运算符覆盖

我有一个类Base定义了一个explicitoperatorbool:structBase{virtualexplicitoperatorbool()const{returntrue;}};我有一个子类Derived,定义了一个operatorbool:structDerived:Base{operatorbool()constoverride{returnfalse;}};如您所见,Derived::operatorbool没有明确标记为explicit,而是标记为override,所以我希望编译器能够投诉。但是,gcc和clang似乎都同意这是有效的。我的期望不合理吗?此外,如果我

c++ - 我们可以在 C++ 中创建一个虚拟的类复制构造函数吗

我们可以在C++中创建一个虚拟的类复制构造函数吗?如何使用? 最佳答案 不,你不能,构造函数不能是虚拟的。C++03-12.1构造函数4)Aconstructorshallnotbevirtual(10.3)orstatic(9.4).[...]如果你需要这样的东西,你可以查找虚拟构造函数成语here. 关于c++-我们可以在C++中创建一个虚拟的类复制构造函数吗,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

c++ - 我们可以在 C++ 中创建一个虚拟的类复制构造函数吗

我们可以在C++中创建一个虚拟的类复制构造函数吗?如何使用? 最佳答案 不,你不能,构造函数不能是虚拟的。C++03-12.1构造函数4)Aconstructorshallnotbevirtual(10.3)orstatic(9.4).[...]如果你需要这样的东西,你可以查找虚拟构造函数成语here. 关于c++-我们可以在C++中创建一个虚拟的类复制构造函数吗,我们在StackOverflow上找到一个类似的问题: https://stackoverflo