【发布时间】:2018-07-03 18:54:59
【问题描述】:
更新 实际情况是我需要创建一个包以提交给 NIST,试图测试我正在研究的面部识别算法。要使用的 API 可以在 NIST API 找到,git 的项目在 git project
一些代码来总结一下场景:
a.h - 接口 A,由纯虚方法和一个静态方法组成(NIST 项目的 frvt11.h)
class A {
public:
virtual ~A() {}
virtual void pure_virtual_method_a() = 0;
virtual void pure_virtual_method_b() = 0;
static int static_method();
}
b.h - b.cpp 的头文件,其中实现了接口 A 的方法
#include "a.h"
class B : A {
public:
void pure_virtual_method_a();
void pure_virtual_method_b();
static int static_method();
}
b.cpp - 接口A的方法的实现。
#include "b.h"
void pure_virtual_method_a() {/*implementation*/};
void pure_virtual_method_b() {/*implementation*/};
int static_method() {/*implementation*/};
c.cpp - 只有一个 main 方法的文件,我想在其中实例化 B 的对象以使用其方法。
#include "b.h"
int main(){
B obj;
obj.pure_virtual_method_a();
return 0;
}
问题一:要在c.cpp中实例化一个B的对象,是否需要像上面那样写头文件b.h?这似乎太多余了!看起来接口A 太没必要了:-(
问题 2: 代码是否以正确的方式实现接口A,并使用B 类型的对象?
问题3:是否需要在b.h中声明B的构造函数并在b.cpp中实现?
【问题讨论】:
-
你的意思是
class B : public A?旁注,您应该熟悉并使用override关键字 -
仅当您打算多态地使用接口时,才需要接口 A。有了 main 函数作为你的存在,A 根本没有存在的理由。
-
@CoryKramer 我不明白你的问题,但我想做的是实现接口 A 方法,将其称为 B 类,并在主函数中使用这些实现的方法。我会看看 override 关键字,谢谢。
-
@CarlosOst 将接口声明为
struct更顺利。 -
感谢弗兰克的评论。我看到在这个例子中确实没有必要,但是搜索这个主题我发现了一些案例,你是对的。
标签: c++ inheritance subclassing