我正在自學C++並學習班級到班級的轉換。我知道,在嘗試進行班級轉換時,您必須使用operator
關鍵字。在這個特殊情況下,我有2個類:Ltime
和Time
。我正在嘗試使用operator
來創建一種方法,以便能夠將每個類互相轉換。Class to Class Conversion in two classes(C++) - Forward Declaration?
我的問題是,因爲我試圖使用operator
關鍵字從類轉換,第一個類聲明將引用尚未定義的類。如果我要改變頭等艙和二等艙,同樣的問題將會持續存在,因爲它們都相互依賴。
我的教科書說爲了解決這個問題,你使用第二類的前向聲明。我這樣做,但這並不能解決我的問題。然後我嘗試將每個類拆分爲單獨的文件,並在每個文件和主文件中使用include語句,但是這並不起作用。如果這是解決方案,請問有人可以解釋這個解決方案的結構嗎?
有人可以請解釋我如何能得到這段代碼的工作?爲了清楚起見,下面是問題和我的代碼。先謝謝你。
編寫一個具有Time類和Ltime類的C++程序。 Time類應該有名爲hours,minutes和seconds的整型數據成員,而Ltime類應該有一個名爲elsecs的長整數數據成員,它表示從午夜開始經過的秒數。對於Time類,包含一個名爲Ltime()的轉換運算符函數,該函數將Time對象轉換爲Ltime對象。對於Ltime類,包含一個名爲Time()的轉換運算符函數,該函數將Ltime對象轉換爲Time對象。
我的代碼:
#include <iostream>
#include <iomanip>
using namespace std;
/*
* Pg 527) §11.3)
*/
class Ltime;
class Time
{
private:
int hours;
int minutes;
int seconds;
public:
Time(int hr=1, int min=2, int sec=3) : hours(hr), minutes(min), seconds(sec) {}
void show();
operator Ltime();
};
void Time::show()
{
cout << setfill('0')
<< setw(2) << hours << " : "
<< setw(2) << minutes << " : "
<< setw(2) << seconds;
}
Time::operator Ltime()
{
return Ltime(3600*hours + 60*minutes + seconds);
}
class Ltime
{
private:
long secondsFromMidnight;
public:
Ltime(long = 0);
void show();
operator Time();
};
Ltime::Ltime(long sec)
{
secondsFromMidnight = sec;
}
void Ltime::show()
{
cout << secondsFromMidnight;
}
Ltime::operator Time()
{
int hours, minutes, seconds;
hours = int(3600/secondsFromMidnight);
minutes = (secondsFromMidnight/60)%60;
seconds = secondsFromMidnight%60;
return Time(hours, minutes, seconds);
}
int main()
{
Time a;
a.show();
cout << endl;
Time b(1,0,0);
b.show();
cout << endl;
Ltime c;
c = Ltime(b);
c.show();
cout << endl;
Ltime(b).show();
cout << endl;
return 0;
}
這是所有在同一個文件?或者這是組織成'.h'和'.cpp'文件? – nhgrif
現在是同一個文件。 – user1527227
remyabel的解決方案解決了我的問題。如果我將這個文件分成3個文件:main.cpp,Ltime.h和Time.h - 是否有人知道包含文件在每個文件中是如何工作的? – user1527227