c – 如何在实现文件中实现虚拟方法?
发布时间:2020-12-16 03:17:13 所属栏目:百科 来源:网络整理
导读:C号问题: 让我说我想使用一个抽象类和多个方法作为接口: // this is AbstractBase.hppclass AbstractBase{public: virtual int foo() = 0; virtual int bar() = 0; // imagine several more pure virtual methods are here}; 我想要一个实现所有虚拟方法的
C号问题:
让我说我想使用一个抽象类和多个方法作为接口: // this is AbstractBase.hpp class AbstractBase { public: virtual int foo() = 0; virtual int bar() = 0; // imagine several more pure virtual methods are here }; 我想要一个实现所有虚拟方法的子类,我不想在头文件中实现它们,而是在它们的实现文件中. 我真的要在这样的子类声明中再次声明所有这些方法吗?我认为应该有一种方法来避免这一步(来自ObjC,Java) // this is Concrete.hpp class Concrete : public AbstractBase { public: int foo(); int bar(); // need to copy paste all the method declarations here again...? why? }; 我想做的是在实现文件中实现这些方法: // this is Concrete.cpp #include "Concrete.hpp" int Concrete::foo() { return 666; } // etc... 但是无法弄清楚如何,而不必在每个子类中重新声明该接口. 解决方法
尽管如果您将定义与声明“Java风格”组合在一起,您可以避免第二次编写函数头签名,即
class Concrete : public AbstractBase { public: int foo() override {return 666;} }; 当您要单独提供定义时,C不允许您避免声明步骤. 原因是声明是主要的,而定义是次要的.为了能写 int Concrete::foo() { return 666; } 在您的CPP文件中,您需要告诉编译器,具体意图在其标题中覆盖foo. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |