2012-04-15 40 views
0

我遇到了這種情況,我覺得非常棘手。我有兩類:time12和time24分別保持時間爲12小時和24小時。他們都應該有個人轉換功能來處理轉換到其他類型。但是如果我首先聲明時間12,那麼轉換函數原型中的「time24」將不確定,因爲time24類將在稍後聲明。那麼我現在該做什麼?我甚至不能在第二堂課之後將其聲明並定義它。那麼現在怎麼辦?涉及轉換功能的棘手情況?

class time12 
{ 
operator time24() //time24 is undefined at this stage 
{ 

} 
}; 

class time24 
{ 

}; 
+0

,並且你的工作是什麼語言? – 2012-04-15 18:16:53

回答

1

通常在C++中,您有兩種類型的文件,.h和.cpp。您的.h文件是您的聲明,.cpp是您的定義。

例子:

convtime.h:

#ifndef CONVTIME_H_ //this is to prevent repeated definition of convtime.h 
#define CONVTIME_H_ 

class time24; //for the operator in class12 

class time12 
{ 
public: 
    time12(int); //constructor 
    operator time24(); 
private: 
    //list your private functions and members here 
} 

class time24 
{ 
public: 
    time24(int); //constructor 
private: 
    //list your private functions and members here 
} 

#endif //CONVTIME_H_ 

convtime.cpp:

#include "convtime.h" 

//constructor for time12 
time12::time12(int n) 
{ 
    //your code 
} 

//operator() overload definition for time12 
time24 time12::operator() 
{ 
    //your code 
} 

//constructor for time24 
time24::time24(int n) 
{ 
    //your code 
} 
2

你可以聲明類,而不在C++中定義它:

class time24; 

class time12 
{ 
operator time24() //time24 is undefined at this stage 
{ 

} 
}; 

class time24 
{ 

}; 
+0

我不知道,謝謝 – Nirvan 2012-04-15 18:23:43

0

你沒有指定語言 - 如果你正在處理一個動態類型語言,如Python,療法EIS 沒有這樣的問題 - 其他類型只需要在執行時是已知的,當轉換方法被調用 - 而不是在分析(編譯)時間 - 所以下面的代碼是有效的:

class Time12(Time): 
    def toTime24(self): 
     return Time24(self._value) 

class Time24(Time): 
    def toTime12(self): 
     return Time12(self._value) 

調用「toTime24」方法時,全局名稱「Time24」被定義爲適當的類。

在C++ - 你可以聲明一個類存根的工作原理大致相同的函數原型 - 只是做:

class time24; 

class time12 
{ ... } 

class time24 
{ ... } 

不舒爾是如何工作的其他靜態類型語言。

+0

好的 - 剛纔看到你已經把語言置於問題的頂部,而不是標籤 - 無論如何,我會將這個答案作爲動態類型工作原理的一個例子世界。 – jsbueno 2012-04-15 18:26:01

+0

Proomoted給wiki的答案,讓來自其他靜態語言(java,c#)的人可以添加它在那裏完成的方式 – jsbueno 2012-04-15 18:27:58