【问题标题】:The best practice for including header files to multiple inherited classes [duplicate]将头文件包含到多个继承类的最佳实践[重复]
【发布时间】:2018-10-01 16:25:24
【问题描述】:

假设我们有一个带有标题parent.h 的父类和两个子类child1.hchild2.h,因为它们都是从父类继承的,所以两个头文件都应该包含parent.h。在另一个文件中包含child1.hchild2.h 将导致父类的重复定义。避免这种情况的最佳方法是什么?使用#pragma once 是一种好习惯,还是有其他方法可以解决这个问题?

【问题讨论】:

    标签: c++ oop include header-files


    【解决方案1】:

    这正是#ifndef 被用作检查头文件的确切原因。

    例如,您的 `parent.h' 可能有:

    #ifndef PARENT_H
    #define PARENT_H
    
    .... //Your header definition
    
    #endif
    

    然后,在child1.hchild2.h

    #ifndef PARENT_H
    #include "parent.h"
    #endif
    
    ....//Your source code
    

    【讨论】:

    • 您不需要或不希望在子标题中使用 #ifndef
    • 那你怎么做呢?
    • @Omar 只需让每个头文件都有自己的包含保护。其他文件不应该知道或关心那些守卫的名字。
    【解决方案2】:

    是的,您可以使用 pragma 或 #ifndef

    #ifndef _AUTOMOBILE_H
    #define _AUTOMOBILE_H
    //...
    #endif  
    

    【讨论】:

    • _AUTOMOBILE_H 这样以下划线和大写字母开头的名称是为 C++ 实现保留的 - 您不应该在自己的代码中创建它们。只需使用AUTOMOBILE_H
    猜你喜欢
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2021-06-24
    相关资源
    最近更新 更多