这些类的某些文件应该在哪里#include?

时间:2013-05-17 15:13:36

标签: c++

我正在制作Radian课程和Degree课程。每个类都有一个构造函数,它将另一个类型的对象作为参数,进行度/弧度转换,并用结果初始化degree或radian参数,如下所示。

Class Radian
{
    private:
      double radians;
    public:
      // ......
      Radian(Degree d) {
      radians = d.getDegrees() * (pi / 180);
      }
      // ...

学位课程的方式相同但相反。因此,为了确保没有某种链接错误,每个标题#include另一个?他们各自的.cpp怎么样?我需要前瞻性声明吗?

4 个答案:

答案 0 :(得分:1)

你需要做三件事(可能是四件事):

  • 使用包含警卫 - #ifndef RADIAN_H...
  • 使用前向声明,即class Degree;
  • 将构造函数体移出头文件并移入.cpp文件。这是因为类的前向声明不允许您引用getDegrees()
  • 之类的成员
  • 理想情况下,让构造函数接受const &个参数。

答案 1 :(得分:0)

在这种情况下你应该使用前向声明。

答案 2 :(得分:0)

由于它们紧密相连,因此它们可能属于单个文件。这使得编写两个内联构造函数成为可能:

class radian;

class degree {
public:
    degree(radian r);
private:
    double degrees;
};


class radian {
public:
    radian(degree d);
private:
    double radians;
};

inline degree::degree(radian r) : degrees(r.get_radians() * 180 / pi) { }
inline radian::radian(degree d) : radians(d.get_degrees() * pi / 180) { }

答案 3 :(得分:0)

我可能会做以下事情:

<强> forward.hpp

#pragma once
class Radian;
class Degree;

<强> radian.hpp

#pragma once
#include "forward.hpp"

class Radian {
    public:
        Radian(Degree d);

    private:
        double radians;
};

<强> radian.cpp

#include "radian.hpp"
#include "degree.hpp"

Radian::Radian(Degree d) {
    radians = d.getDegrees() * (pi / 180);
}

<强> degree.hpp

#pragma once
#include "forward.hpp"

class Degree {
    public:
        Degree(double x);
        double getDegrees() const;
    private:
        double deg;
}

<强> degree.cpp

#include "degree.hpp"

Degree::Degree(double x) {
    deg = x;
}

double Degree::getDegrees() const {
    return deg;
}