其中一天,一位同事对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文件中"。但是可以接受吗?如果没有,究竟应该如何正确地编写类声明/定义?
答案 0 :(得分:1)
问题1:是的,这是正确的。
问题2:是的,这是可以接受的。所有定义都应该在.cpp文件中。
答案 1 :(得分:1)
回答1 :从技术上讲,是的。您的头文件正在定义您的类,但这没关系。你的类的定义包含几个类方法的声明,以及关于声明与定义问题的重要性。
答案2 :正确:您的test.hpp文件包含测试方法的声明,这些声明在test.cpp文件中定义。头文件可以定义一个由方法声明组成的类。它并不违反规则;规则是正确的,但它主要与班级的方法有关。
在考虑内联方法和类前向声明等内容时,有一些例外,但我们不需要担心这些内容。