关闭

C++两个类互相调用彼此的方法

4506人阅读 评论(0) 收藏 举报
分类:

两个类A和B实现互相调用彼此的方法,如果采用彼此包含对方头文件的方式会出现循环引用,所以采用了类的前置声明的方式

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;
}




3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:565836次
    • 积分:6957
    • 等级:
    • 排名:第3524名
    • 原创:148篇
    • 转载:141篇
    • 译文:0篇
    • 评论:187条
    About me
    creative idea
    最新评论