C++两个独立的类文件A和B实现相互调用【转】


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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM