2013-05-17 91 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; 
} 
相關問題