C++ 前置声明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Rbaggio92/article/details/84554611

特点:被声明的类不用重新编译,节省编译时间
比如A包含一个指向B的指针,B包含A的一个实例,这种情况下,使用前置声明。

易错的点
class Date;  
class Task1 {  
public:  
    Date d;  
};  
因为分配器为d分配内存的时候,必须要知道 d的大小

主要应用场景是两个头文件相互包含的场景,建议仅将前置声明用于解决循环引用问题
(头文件并不参加链接和编译。编译器第一步要做的就是简单的把头文件在包含它的源文件中展开。不知你是否能理解这句话。也就是头文件里面有什么内容,通通把它移到包含这个头文件的源文件里,当无法展开头文件,就会出现问题)

下面是示例demo

1、

//Layer.h   
// 图层类   
#pragma once   
#include <iostream>
//#include "Symbol.h"   
class CSymbol;

class CLayer
{
public:
	CLayer(void);
	virtual ~CLayer(void);
	void CreateNewSymbol();

private:

	CSymbol*    m_pSymbol;  // 该图层相关的符号指针   
};

2、

#include"Layer.h"
#include "Symbol.h"
CLayer::CLayer(void)
{
	m_pSymbol = NULL;
}

CLayer::~CLayer(void)
{

}

void CLayer::CreateNewSymbol()
{

}

3、

// Symbol.h   
// 符号类   
#pragma once   
#include "Layer.h"   

class CSymbol
{
public:
	CSymbol(void);
	virtual ~CSymbol(void);

public:

	CLayer *m_pRelLayer; // 符号对应的相关图层   
};

4、

#include "Symbol.h "

CSymbol::CSymbol(void)
{

}

CSymbol::~CSymbol(void)
{

}

概念参考:

https://blog.csdn.net/liyuanhong13/article/details/9953023

猜你喜欢

转载自blog.csdn.net/Rbaggio92/article/details/84554611
今日推荐