类的前向声明与互相包含

mian.cpp

#include <iostream>
#include <string>
using namespace std;
#include "A.h"
#include "B.h"
int main()
{
}

A.h

#ifndef _A_H_
#define _A_H_
/*类的前向声明*/
class B;
class A
{
public:
	B* b;
	//B b1;
	void fun()
	{
		//int a = sizeof(B);
		//b->funb();
		//b->m_i;
	}
};
#endif // !_A_H_

B.h

#ifndef _B_H_
#define _B_H_
class A;
class B
{
public:
	A* a;
	//A a1;
	void funb()
	{
	}
	int m_i;
};
#endif // !_B_H_

在上面的例程当中先是包含了A.h而后包含的B.h
所以在mian.cpp当中是先定义了类A,而后定义的类B
在类与类之间相互包含时,有时候使用类的前向声明是不起作用的,在A.h当中,只要涉及了定义类B对象,或者使用sizeof计算类B的大小,或者使用一个指针去调用类B的成员变量或者成员函数,这几种情况下都是会编译失败的,必须要找到B的定义才行,而如果使用指针的话,编译是ok的,指针在定义时就已经知道了占几个字节,所以只需要前向声明就行,而其它的情况就不一样了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值