我正在自学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