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
原创粉丝点击