我有三個類。 A,B和C.抽象類指針
B類是一個抽象類。
A類需要調用B.類的功能
C類從類B來源,並且還需要持有一個指向A類調用類A的功能
要求1:
需要指向B的指針我知道這可以通過使用「B是一個抽象類,它不可能創建它的實例來實現,因此我在A中創建一個C實例並使用它來調用B的函數。「但是在創建C的實例時遇到問題。
要求2:
C類需要一個指向類A的指針來調用它的函數。我如何實現這一目標?
//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