[英]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.