0

我总是这样安排我的 C++ 头文件和源文件:

程序.h

#include <iostream>
class Prog
{
    public:
        Prog(std::string);
        ~Prog();
        
        void printName();
        
    private:
        std::string name;
};

#include "prog.cpp"

程序.cpp

Prog::Prog(std::string n):
    name(n)
{
    std::cout << "Program \"" << name << "\" started.\n";
}

Prog::~Prog()
{
    std::cout << "Program \"" << name << "\" ended.\n";
}

void Prog::printName()
{
    std::cout << "Program name is: \"" << name << "\".\n";
}

主文件

#include "prog.h"

int main()
{
    Prog prog {"MyCalculator"};
    
    prog.printName();
    
    return 0;
}

但我最近发现以其他方式排列它们很常见:

程序.h

class Prog
{
    public:
        Prog(std::string);
        ~Prog();
        
        void printName();
        
    private:
        std::string name;
};

程序.cpp

#include <iostream>
#include "prog.h"

Prog::Prog(std::string n):
    name(n)
{
    std::cout << "Program \"" << name << "\" started.\n";
}

Prog::~Prog()
{
    std::cout << "Program \"" << name << "\" ended.\n";
}

void Prog::printName()
{
    std::cout << "Program name is: \"" << name << "\".\n";
}

主文件

#include <iostream>
#include "prog.h"

int main()
{
    Prog prog {"MyCalculator"};
    
    prog.printName();
    
    return 0;
}

我发现第一种方法更方便,那么有什么理由让我更喜欢第二种方法而不是第一种方法?

4

2 回答 2

2

头文件不应包含源代码。

  • 我认为第一种方法可能会在足够复杂的项目中引发依赖错误(例如,使用循环依赖),因为不要将声明和定义分开。
  • 第二个编译时间更快,因为你可以单独编译每个源文件。

此外,您可能会发现这个问题很有用。

于 2020-08-22T13:40:13.787 回答
0

第一个版本是“Accelerated C++”(2000 年版)一书在首次引入类声明的头文件时建议做的事情。

我想第二个版本可以被视为更优雅,因为它#include在程序开始时将所有预编译器语句组合在一起。

于 2020-08-22T13:47:26.380 回答