加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 两个相互引用的类

发布时间:2020-12-16 03:42:16 所属栏目:百科 来源:网络整理
导读:假设有两个类,它们需要彼此:容器和项目. 类容器创建类项的实例.类项的每个实例都包含一个类容器的实例,只需要调用类容器的方法method_called_by_item.类容器需要查看类项的所有字段. 问题是前向声明:我想在item.h中有一个前向声明,这样类项可以有一个容器
假设有两个类,它们需要彼此:容器和项目.
类容器创建类项的实例.类项的每个实例都包含一个类容器的实例,只需要调用类容器的方法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);
}

解决方法

您已经向item.h添加了前向声明,因此您需要做的就是将以下行添加到item.cpp中.
#include "container.h"

container.h已经包含item.h,因此您不必进行任何其他更改,但正如Mahmoud Fayez所指出的那样,您也可以在其中添加前向声明.这将消除通常需要的头文件的依赖性 – 它可以减少大型项目的构建时间,并允许头文件“独立”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读