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