关闭

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

6600人阅读 评论(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;
}




4
0
查看评论

C++中两个类相互包含引用问题

在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型 class A { int i; B b; } class B { int i; A* a; } 请注意上面的定义内容,一般情况下是不能出现类A,类B...
  • leo115
  • leo115
  • 2012-03-26 14:58
  • 14034

关于C++两个类相互引用的一点思考

昨天跟朋友讨论了一下在C++中如果出现两个类相互引用的情况,编译无法通过的问题如何解决: // A.h #ifndef A_H #define A_H #include "B.h" class A { B b; }; #endif A_H // B.h #ifnde...
  • skywalker_leo
  • skywalker_leo
  • 2015-09-01 10:40
  • 1412

C++中两个类互相引用的解决方法

一、问题描述 现在有两个类A和B需要定义,定义A的时候需要用到B,定义B的时候需要用到A。 二、分析 A和B的定义和调用都放在一个文件中肯定是不可以的,这样就会造成两个循环调用的死循环。 根本原因是:定义A的时候,A的里面有B,所以就需要去查看B的占空间大小,但是查看的时候又发现需要知道A的占空间大...
  • XD_lixin
  • XD_lixin
  • 2014-11-17 20:01
  • 5568

java两个类相互持有引用的小问题

今天在写一个小程序中遇到一个问题,我想在两个类中相互持有引用,比如: 1. 一个类是画板,另一个类是画板中一个图形; 2. 画板必须持有图形的引用才能绘制图形; 3. 图形希望能够根据自身一些属性改变画板中其他的图形,所以需要持 有画板的引用来操作画板的资源。 于是就有如下代码: 画板: pub...
  • GVFDBDF
  • GVFDBDF
  • 2016-03-07 13:56
  • 3599

如何有效解决C与C++的相互调用问题

    在实际工作中可能经常要进行C和C++的混合编程,C++调用C语言的代码通常都比较容易,但也有一些细节需要注意。C要调用C++的代码就略为麻烦一些,因为C不支持面向对象的特征。首先我们来看一下C++调用C语言的代码。要让你的C代码既能被C代码又能被C++调用虽说容...
  • gobitan
  • gobitan
  • 2007-03-18 14:02
  • 15602

C++ 两个包含类互相调用彼此的类成员变量和方法

C++ 两个包含类互相调用彼此的类成员变量和方法
  • qq_27278957
  • qq_27278957
  • 2017-09-13 16:23
  • 266

C++ 两个类相互引用

实际工程中两个类相互引用的情况还是比较多的,其中大致分为两种: 1.同一项目下相互引用。 2.不同项目间相互引用。 情况1: 只需要相互包含头文件就行了,但是要避免重复包含,用#pragma once或者#ifndef都可以。 如果你编译时仍然发现存在类或者变量常量未定义,请检查ifndef中的宏是...
  • Vis_Stu
  • Vis_Stu
  • 2017-03-29 16:09
  • 406

C++ 一个类调用另一个类的成员变量/成员函数

有时候,两个类之间并没有继承的关系,但是其中一个类需要引用另一个类中的成员变量或者成员函数。怎样办到呢? 假设已经新建了两个类A、B。 class A { public: A(); ~A(); public: int nAdd; int add(); }; class B { ...
  • chengzhongxuyou
  • chengzhongxuyou
  • 2015-12-16 15:44
  • 16810

c++ 类的互相调用的方法

  • 2010-12-25 13:29
  • 42KB
  • 下载

C++ 类、对象,及其调用方法

声明:本人是一名iOS开发者,接触C++已经很久了,之前只能是调用别人写好的方法,但不知道怎么去声明及其实现这些方法,现在是要好好学习C++,把每天学的东西及其心的一一记录在blog里面,互相学习,有些观点或者思想不太对,请多多指点; C++的类和OC的类可以理解为同一个类,但是OC的类只包含一个类...
  • Arodung
  • Arodung
  • 2016-07-30 18:35
  • 4126
    个人资料
    • 访问:624002次
    • 积分:7379
    • 等级:
    • 排名:第3569名
    • 原创:148篇
    • 转载:143篇
    • 译文:0篇
    • 评论:187条
    About me
    creative idea
    最新评论