forward declaration 前置声明
来源:互联网 发布:迅雷远程知乎 编辑:程序博客网 时间:2024/05/01 22:09
when class A and class relationship is very close, like that
// chair.h#include "room.h"class chair{ room* a;public: chair(void); ~chair(void);};// chair.cpp#include <iostream>//#include "room.h"#include "chair.h"chair::chair() //: a ( *(new chair() ) ){ printf("%d Line\n",__LINE__); //a =new chair ; //terrible, will be loop printf("here is chair\n"); std::cout<<"chair's constructor\n";}chair::~chair(){ std::cout<<"chair's destructor\n";}// room.h#include "chair.h"class chair;class room{ chair* b;public: room(void); virtual ~room(void);};//room.cpp#include <iostream>#include "room.h"//#include "chair.h"room::room(){ printf("%d Line\n",__LINE__); b = new chair; std::cout<<"room's constructor\n";}room::~room(){ std::cout<<"room's destructor\n";}////main.cpp#include <stdio.h>#include "room.h"#include "chair.h"int main(){ setbuf(stdout,NULL); printf("%d Line\n",__LINE__); room a; printf("%d Line\n",__LINE__); chair b; printf("%d Line\n",__LINE__);}
the two .h file will contain each other, to compile the project, it will be loop
the right way
// chair.hclass room;class chair{ room* a;public: chair(void); ~chair(void);};// chair.cpp#include "room.h"#include "chair.h"chair::chair() //: a ( *(new chair() ) ){ printf("%d Line\n",__LINE__); //a =new chair ; //terrible, will be loop printf("here is chair\n"); std::cout<<"chair's constructor\n";}chair::~chair(){ std::cout<<"chair's destructor\n";}// room.hclass chair;class room{ chair* b;public: room(void); virtual ~room(void);};//room.cpp#include <iostream>#include "room.h"#include "chair.h"room::room(){ printf("%d Line\n",__LINE__); b = new chair; std::cout<<"room's constructor\n";}room::~room(){ std::cout<<"room's destructor\n";}//main.cpp#include <stdio.h>#include "room.h"#include "chair.h"int main(){ setbuf(stdout,NULL); printf("%d Line\n",__LINE__); room a; printf("%d Line\n",__LINE__); chair b; printf("%d Line\n",__LINE__);}
use forward declaration, you only can declaration a class reference or a point to a class ,
becase it’s size is knowed by compiler, the compile can compute the size of the class.
declaration a class object ,will be error
0 0
- forward declaration 前置声明
- 前置声明(Forward declaration)
- 前置声明(Forward declaration)
- C++中的前置声明(Forward Declaration)
- C++中的前置声明(Forward Declaration)
- C++中的前置声明(Forward Declaration)
- C++中的前置声明(Forward Declaration)
- C++中的前置声明(Forward Declaration)
- C++中的前置声明(Forward Declaration)
- C++中的前置声明(Forward Declaration)
- 正确使用#include和前置声明(forward declaration)
- 正确使用#include和前置声明(forward declaration)
- 正确使用#include和前置声明(forward declaration)
- 正确使用#include和前置声明(forward declaration)
- 正确使用#include和前置声明(forward declaration)
- 正确使用#include和前置声明(forward declaration)
- 正确使用#include和前置声明(forward declaration)
- 正确使用#include和前置声明(forward declaration)
- ListView
- 真正的智能家居路在何方?
- Ext.Ajax.request和form.getForm().submit的区别
- Unity3D研究院之多语言用中文做KEY(七十五)
- 网狐框架分析八--web登录游戏大厅流程 150629
- forward declaration 前置声明
- 嵌入式linux 博客收藏
- *********背景音乐*******
- 图像视频方面
- ViewPager中怎么获取Fragment
- 程序员篇:8个开发技巧助你薪水更上一层楼
- 三分钟教你学Git(十七) - 钩子
- linux--redhat 如何修改root用户密码
- android获取网络图片简单实现