兩個類A和B實現互相調用彼此的方法
C++中,如果采用彼此包含對方頭文件的方式會出現循環引用,所以采用了類的前置聲明的方式。
1,class A采用前置聲明的方式聲明class B
2,在ClassB的頭文件中包含class A 的頭文件
3,在class A中只能聲明class B類型的指針或者引用
具體代碼如下:
A.h:
#pragma once class B; class A { public: A(); A(class B* pB); ~A(); public: void displayA(); void invokeClassBInClassA(); private: class B *mB; };
A,cpp
#include "A.h" #include "B.h" #include <iostream> using namespace std; A::A() { } A::A(B * pB) { mB = pB; } A::~A() { } void A::displayA() { cout << "this is A" << endl; } void A::invokeClassBInClassA() { cout << "class A invoke class B starts>>" << endl; mB->displayB(); }
B.h
#pragma once #include "A.h" class B { public: B(); ~B(); public: void displayB(); void invokeClassAInClassB(); private: class A * mA; };
B.cpp
#include "B.h" #include <iostream> using namespace std; B::B() { mA = new A(); } B::~B() { } void B::displayB() { cout << "this is the B" << endl; } void B::invokeClassAInClassB() { cout << "class B invoke class A starts >>" << endl; mA->displayA(); }
main.cpp
#include <iostream> #include "A.h" #include "B.h" using namespace std; int main() { cout << "----------main starts---------------" << endl; class B* pB = new B(); class A* pA = new A(pB); pA->displayA(); pA->invokeClassBInClassA(); pB->displayB(); pB->invokeClassAInClassB(); cout << "----------main ends----------------" << endl; return 0; }
---------------------
作者:一路陽光隨行
來源:CSDN
原文:https://blog.csdn.net/wuchuanpingstone/article/details/52384933
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!