У меня есть три класса. A, B и C.Указатель на абстрактный класс
Класс B - это абстрактный класс.
класса А должен вызывать функции из класса В.
Класс C является производным от класса B, а также необходимо провести указатель класса А для вызова функции класса А.
Требование 1:
Требуется указатель на B. Я знаю, что это может быть достигнуто с использованием «B», являющегося абстрактным классом, его невозможно создать экземпляры. Поэтому я создаю экземпляр C в A и использую его для вызова функций B . "Но сталкиваются с проблемами при создании экземпляра C.
Требование 2:
Класс C необходим указатель на класс А называть его функции. Как мне это достичь?
//A.h
class A
{
public:
void fun1();
void fun2();
private:
// creating ptr to C because B is an abstract class
C *m_ptrC;
};
//A.cpp
void A::fun1()
{
m_ptrC->fun4();
}
void A::fun2()
{
//some code
}
//B.h
class B
{
public:
//pure virtual function
void fun3() = 0;
void fun4();
};
//B.cpp
void B::fun4()
{
//pure virtual hence C::fun3() gets called
fun3();
}
//C.h
class C:public B
{
public:
//Overridden from B
void fun3();
private:
//Ptr to class A, to call fun
A *ptrA;
};
//C.cpp
//Overridden from B
void C::fun3()
{
ptrA->fun2();
}
Как следует инициализировать ptrC и ptrA? Также я не уверен в прямом объявлении, и файл включает результат с ошибкой перефразирования/неполного типа.
Добавить код, демонстрирующий проблему. –
Что вы делаете или не имеете, не ясно из вашего заявления. У вас есть класс, который происходит от B и реализует функции? – crashmstr
Я думаю, что OP имеет проблему с круговыми зависимостями. это может помочь. – Jarod42