forward declaration 前置声明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值