首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否在派生类中包括用作基类接口一部分的头?

是否在派生类中包括用作基类接口一部分的头?
EN

Stack Overflow用户
提问于 2013-07-27 05:49:55
回答 3查看 135关注 0票数 1

以下列例子为例:

代码语言:javascript
运行
复制
// base.h
#include <string>
struct base
{
    virtual ~base() = default;
    virtual void do_something(const std::string& arg) const = 0;
};

// derived.h
struct derived : base
{
    void do_something(const std::string& arg) const
    {
         //...
    }
};

在这个例子中,derived.h应该包括string头吗?

我完全同意包含您所使用的内容的原则,但在这种情况下,base.h必须包括string,如果接口更改为不使用string (相应地将include <string>base.h中删除),那么接口无论如何都会中断突出显示。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-27 06:01:59

如果接口更改为不包含string,则派生的do_something也必须更改。如果您需要在derived.h中独立于接口(例如,由于与接口无关但存在于实现中的详细信息)--在本例中,是的,在这里也包括<string>可能更好。

票数 3
EN

Stack Overflow用户

发布于 2013-07-27 06:00:25

我采用的方法是始终使用include,__ing,为那个文件所需要的任何东西。然后,当我在某个地方缺少一个符号时,我就不需要到处搜索标题和解开依赖关系的纠缠网了。包括警卫意味着这很便宜。

但这完全取决于你。如果您想省略它,使derived.cpp更短,并在稍后的日期添加它,如果需要的话,这也没关系。

根本没有“正确”的答案。

票数 2
EN

Stack Overflow用户

发布于 2013-07-27 06:00:12

你可以包括"base.h“不要认为much.The太少,你写的代码越少,代码就越好。

代码语言:javascript
运行
复制
#include "base.h"
struct derived :public base
{
    void do_something(const std::string& arg) const
    {
         //...
    }
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17894725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档