[英]two classes referencing each other
假設有兩個類,它們需要彼此: 容器和項目 。 類容器創建類項的實例。 類項的每個實例都包含一個類容器的實例,只需要調用類容器的方法method_called_by_item 。 類容器需要查看類項的所有字段。
問題是前向聲明:我想在item.h中有一個前向聲明,這樣類項可以有一個容器作為字段並調用方法method_called_by_item 。 我怎么做?
類容器 ,用於創建項目。
// container.h
#ifndef CONTAINER_H
#define CONTAINER_H
#include "item.h"
class container{
public:
item * create_item();
void method_called_by_item(item * i);
};
#endif //CONTAINER_H
實施:
// container.cpp
#include "container.h"
item * container::create_item(){
return new item(this);
}
void container::method_called_by_item(item * i){
// do stuff with item
}
類項 ,需要調用一個容器方法:
// item.h
#ifndef ITEM_H
#define ITEM_H
#include <iostream>
class container;
class item{
public:
item(container * c);
void do_something();
container * c;
};
#endif //ITEM_H
實施:
// item.cpp
#include "item.h"
item::item(container * c){
this->c = c;
}
void item::do_something(){
this->c->method_called_by_item(this);
}
在container.h中
class item; // do not include the item.h
在container.cpp中
#include "item.h"
在item.h中
class container; // do not include container.h
在item.cpp中
#include "container.h"
您已經向item.h添加了前向聲明,因此您需要做的就是將以下行添加到item.cpp中 。
#include "container.h"
container.h已經包含item.h所以您不必進行任何額外的變化,但作為馬哈茂德·法耶茲指出,你可以有添加前向聲明為好。 這將消除通常需要的頭文件的依賴性 - 它可以減少大型項目的構建時間,並允許頭文件“獨立”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.