您的位置:首页 > 其它

forward declaration 前置声明

2015-06-30 11:19 423 查看
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.h
class 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.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__);
}


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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: