头文件中的整个类没有.cpp文件

时间:2015-07-27 23:49:14

标签: c++

我一直在使用Java工作,而C ++也让人困惑。

在Java中你有类文件,起初我认为它相当于C ++中的头文件,如下所示:

#ifndef PROGRAM_H
#define PROGRAM_H

#include <iostream>
#include <string>

class Program {
private:
    std::string name, version, author;

public:
    Program(std::string name, std::string version, std::string author) {
        this->name = name;
        this->version = version;
        this->author = author;
    }

    std::string toString() {
        return name + " " + version + " - by " + author + "\n";
    }

} MainProgram("program", "2.0a", "foo bar");

#endif

我刚刚读到我应该将我的类分成两个文件,用于定义类的头文件和用于实现类的.cpp文件。

我真的应该为每节课做吗?因为上面的头类编译得很好,并且将它真正地分成两个文件似乎太简单了,也许只有大型类才能按惯例分开?有什么建议吗?

3 个答案:

答案 0 :(得分:5)

您确实应该将.h和.cpp对中的声明和定义(或接口和实现)分开。

当您使用多个相互依赖的源文件时,这个单独编译模型背后的原因就变得清晰了。由于标题可能遍布整个地方#include'd,因此分离允许您对实现进行更改,而无需重新编译使用该接口的所有代码

节省时间可能非常重要,特别是在对一个文件进行快速编辑时。

(.h / .cpp配对约定的值得注意的例外是模板类 - 它确实存在于.h文件中 - 但这是另一个故事。)

答案 1 :(得分:3)

简答:是的。这样,如果修改类实现(不是接口),则使用您的类的客户端不必重新编译,而只需链接与修改后的实现相对应的新目标文件。

答案很长:阅读the C++ compilation model

答案 2 :(得分:-1)

是。你应该分开。你在写C ++。不是Java。去找一本书/教程来解释它。