在头文件中定义类是否正确?

时间:2014-10-27 22:07:01

标签: c++ class oop header-files

其中一天,一位同事对another question of mine发表了评论:"您在代码中调用声明的所有内容实际上都是定义" 。我决定花一些时间来理解这两个概念之间的区别。

考虑以下代码:

test.hpp

class Test
public:
    Test();
};

TEST.CPP

#include "test.hpp"
Test::Test()
{
    // code
}

的main.cpp

#include "test.hpp"
int main()
{
    Teste objTest = Test();
    return 0;
}

问题1:根据我的理解,头文件 test.hpp 定义一个名为Test的类(基于{ {3}})。这是对的吗?

问题2:我的代码基于一种常见的做法(我已经看到了一些遵循该模式的开源库),这似乎违反了规则&#34 ; 标题应仅包含声明;所有定义都应该在.cpp文件中"。但是可以接受吗?如果没有,究竟应该如何正确地编写类声明/定义?

2 个答案:

答案 0 :(得分:1)

问题1:是的,这是正确的。

问题2:是的,这是可以接受的。所有定义都应该在.cpp文件中。

答案 1 :(得分:1)

回答1 :从技术上讲,是的。您的头文件正在定义您的类,但这没关系。你的类的定义包含几个类方法的声明,以及关于声明与定义问题的重要性。

答案2 :正确:您的test.hpp文件包含测试方法的声明,这些声明在test.cpp文件中定义。头文件可以定义一个由方法声明组成的类。它并不违反规则;规则是正确的,但它主要与班级的方法有关。

在考虑内联方法和类前向声明​​等内容时,有一些例外,但我们不需要担心这些内容。