2013-05-17 74 views
0

我正在做一个Radian课程和学位课程。每个类都有一个构造函数,它将另一个类型的对象作为参数,进行度/弧度转换,并使用结果初始化度或弧度参数,如下所示。哪些文件应该包含这些类的文件?

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

而且学位课程是相同的方式,但相反。所以为了确保没有某种连接错误,每个标题#是否包含其他标题?那么他们各自的.cpp呢?我需要一个前瞻性的类声明吗?

+0

@iccthedral他既需要,也需要移动在执行至少有一个类的成员函数将其他类引用到.cpp文件中。 – Praetorian

回答

0

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

+1

他不能。 Radian构造函数(写成)不会编译。 – kenrogers

+0

我再次阅读并且标记了答案后,我自己注意到了这一点。抱歉! – Stefan

+0

最好修复答案而不是标记。 –

1

你需要做三件(或许为四个)的东西:

  • 使用include防范 - #ifndef RADIAN_H...
  • 使用前向声明,即class Degree;
  • 移动的构造体出来的头文件和成.cpp文件。这是因为一个类的前向声明不会让你引用像getDegrees()
  • 理想情况下,使构造函数采取const &参数。
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) { } 
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; 
} 
相关问题