C++ 某些文件应该放在哪里#include';这些课程有哪些课程?
我在上弧度课和学位课。每个类都有一个构造函数,它将另一种类型的对象作为参数,进行度/弧度转换,并用结果初始化度或弧度参数,如下所示C++ 某些文件应该放在哪里#include';这些课程有哪些课程?,c++,C++,我在上弧度课和学位课。每个类都有一个构造函数,它将另一种类型的对象作为参数,进行度/弧度转换,并用结果初始化度或弧度参数,如下所示 Class Radian { private: double radians; public: // ...... Radian(Degree d) { radians = d.getDegrees() * (pi / 180); } // ... 学位课程也是同样的方式,但有
Class Radian
{
private:
double radians;
public:
// ......
Radian(Degree d) {
radians = d.getDegrees() * (pi / 180);
}
// ...
学位课程也是同样的方式,但有可能。因此,为了确保没有某种链接错误,每个标题是否应该包含另一个?他们各自的cpp呢?我需要转发类声明吗?在这种情况下,您应该使用转发声明。您需要做三件事(可能是四件事):
- 使用包括防护装置-
#如果没有弧度…
- 使用前向声明,即
类度代码>
- 将构造函数主体从头文件移出并移到.cpp文件中。这是因为类的前向声明不允许引用成员,如
getDegrees()
- 理想情况下,让构造函数接受
参数const&
- 因为它们紧密地联系在一起,所以它们可能属于一个文件。这使得编写两个内联构造函数成为可能:
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) { }
我可能会这样做: 前进.hpp
#pragma once
class Radian;
class Degree;
#pragma once
#include "forward.hpp"
class Radian {
public:
Radian(Degree d);
private:
double radians;
};
#include "radian.hpp"
#include "degree.hpp"
Radian::Radian(Degree d) {
radians = d.getDegrees() * (pi / 180);
}
#pragma once
#include "forward.hpp"
class Degree {
public:
Degree(double x);
double getDegrees() const;
private:
double deg;
}
#include "degree.hpp"
Degree::Degree(double x) {
deg = x;
}
double Degree::getDegrees() const {
return deg;
}
弧度hpp
#pragma once
class Radian;
class Degree;
#pragma once
#include "forward.hpp"
class Radian {
public:
Radian(Degree d);
private:
double radians;
};
#include "radian.hpp"
#include "degree.hpp"
Radian::Radian(Degree d) {
radians = d.getDegrees() * (pi / 180);
}
#pragma once
#include "forward.hpp"
class Degree {
public:
Degree(double x);
double getDegrees() const;
private:
double deg;
}
#include "degree.hpp"
Degree::Degree(double x) {
deg = x;
}
double Degree::getDegrees() const {
return deg;
}
弧度cpp
#pragma once
class Radian;
class Degree;
#pragma once
#include "forward.hpp"
class Radian {
public:
Radian(Degree d);
private:
double radians;
};
#include "radian.hpp"
#include "degree.hpp"
Radian::Radian(Degree d) {
radians = d.getDegrees() * (pi / 180);
}
#pragma once
#include "forward.hpp"
class Degree {
public:
Degree(double x);
double getDegrees() const;
private:
double deg;
}
#include "degree.hpp"
Degree::Degree(double x) {
deg = x;
}
double Degree::getDegrees() const {
return deg;
}
度hpp
#pragma once
class Radian;
class Degree;
#pragma once
#include "forward.hpp"
class Radian {
public:
Radian(Degree d);
private:
double radians;
};
#include "radian.hpp"
#include "degree.hpp"
Radian::Radian(Degree d) {
radians = d.getDegrees() * (pi / 180);
}
#pragma once
#include "forward.hpp"
class Degree {
public:
Degree(double x);
double getDegrees() const;
private:
double deg;
}
#include "degree.hpp"
Degree::Degree(double x) {
deg = x;
}
double Degree::getDegrees() const {
return deg;
}
degree.cpp
#pragma once
class Radian;
class Degree;
#pragma once
#include "forward.hpp"
class Radian {
public:
Radian(Degree d);
private:
double radians;
};
#include "radian.hpp"
#include "degree.hpp"
Radian::Radian(Degree d) {
radians = d.getDegrees() * (pi / 180);
}
#pragma once
#include "forward.hpp"
class Degree {
public:
Degree(double x);
double getDegrees() const;
private:
double deg;
}
#include "degree.hpp"
Degree::Degree(double x) {
deg = x;
}
double Degree::getDegrees() const {
return deg;
}
他不能。弧度构造函数(如所写)无法编译。我在再次阅读后注意到了这一点,并标记了答案。很抱歉最好是修复答案而不是标记。@iccthedral他需要两者,还需要将引用另一个类的至少一个类成员函数的实现移动到.cpp文件中。