从库类扩展,如何让库调用派生类方法

时间:2018-04-01 10:57:26

标签: c++ inheritance

我想知道这是否可行。同样,问题是:

  

如何从库类扩展,然后让库调用a   派生类里面的函数?

显然,在编写使用继承的代码之前,已经构建/编译了库(如下所示为DerivedClass)。我想尽可能地远离用户。为此,我进行了以下设置(包括为简单起见而省略):

LibraryClass是我创建的.lib中的一个类。

LibraryClass.h
class LibraryClass{
public:
    virtual void MyMethod() { }
};

DerivedClass继承自此库:

DerivedClass.h
Class DerivedClass: public LibraryClass {
public:
    virtual void MyMethod();
};

如果我在DerivedClass源文件中定义MyMethod,如下所示:

DerivedClass.cpp
void DerivedClass::MyMethod() {
    cout << "it works!" << endl;
}

库有没有办法调用派生类&#39;方法?我想将DerivedClass对象作为指针传递给库,但是库不能访问包含它的头,因为它已经被编译到.lib中。

我之前已经看过这个(Urho3D),他们使用黑魔法还是我错过了一些简单的东西?

1 个答案:

答案 0 :(得分:0)

这正是动态调度(在C ++中称为virtual)的作用:给定Base*(或Base&)引用的对象一个派生类型,对虚函数的调用即使没有任何Derived声明也会找到覆盖(因此即使调用是“先编译”)。

关于你的“图书馆提供的main”这个想法,这个问题要困难得多:一般来说,他如何知道如何构建你的对象,以及如果你想知道怎么做?您是否与two “extending classes”相关联?

但是有可能,如果库为它设计:让库提供一个全局指针变量(如果你想要一个默认值,它在main中指定),并且具有扩展类的构造函数赋值{ {1}}。然后只需定义该类类型的全局对象。如果您不需要默认行为,您也可以在库中声明并调用但不定义初始化函数,并将其保留到扩展中以定义它。