클래스에 가상 인터페이스를 내보내는 DLL이 있습니다. 해당 인터페이스를 상속하지만 DLL에서 기능을 유지하고 싶습니다.DLL에서 가상 클래스 인터페이스 가져 오기 (C++)
DLL.h (내가 DLL을 포함하는 데 사용하는 헤더)
#ifndef EXPORT
#define EXPORT __declspec(dllexport)
#else
#define EXPORT __declspec(dllimport)
#endif
class EXPORT IClassA {
public:
virtual int foo() = 0;
virtual int bar() = 0;
};
EXPORT IClassA* new_IClassA(int a, int b);
Internal.h
#include "DLL.h"
class ClassA : public IClassA {
public:
ClassA(int a, int b);
int foo();
int bar();
private:
int a;
int b;
};
DLL.cpp
#include "internal.h"
ClassA::ClassA(int a, int b) { this->b = b; this->a = a; }
int ClassA::foo() { return a; }
int ClassA::bar() { return b; }
IClassA* new_IClassA(int a, int b) {
return new ClassA(a, b);
}
가 어떻게에서 (IClassA을 상속 할 수 있습니다 foo() 및 bar()를 재정의하지 않고 (DLL을 포함하는 프로젝트) (이후 내 프로젝트에서는 가능하지 않을 것입니다) ClassA insead에 정의 된 es?
class ClassB : public IClassA {
public:
// I have no idea how to make a suitable constructor
int baz() { return c };
private:
int c;
}
이제 ClassB에는 foo(), bar() 및 baz() 메소드가 있습니다.
'foo'와'bar'는 순수 가상 멤버 함수를. 'ClassB' _must_는 그 함수를 정의해야합니다. 그렇지 않으면 인스턴스화 할 수 없습니다. 'ClassA'에서 기능을 상속 받으려면'IClassA' 대신에'class'에서 파생해야합니다. –
ClassB는 생성자에서 new_IClassA()를 호출하고 단순히 IClassA-> foo 및 bar를 호출하는 foo 및 bar를 구현해야합니다. 집계라고하는 일종의 구성은 매우 기계적이지만 컴파일러의 도움을받지 못합니다. –