两个类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
版权声明:本文为博主原创文章,转载请附上博文链接!