Я учу себя C++ и узнаю о преобразованиях класса в класс. Я понимаю, что при попытке преобразования класса в класс вы должны использовать ключевое слово operator
. В этом конкретном случае у меня есть 2 класса: Ltime
и Time
. Я пытаюсь создать метод, используя operator
, чтобы иметь возможность конвертировать каждый класс друг в друга.Преобразование класса в класс в двух классах (C++) - форвардная декларация?
Моя проблема в том, что, поскольку я пытаюсь использовать ключевое слово operator
для преобразования из класса, объявление первого класса будет ссылаться на класс, который еще не определен. Если бы я должен был переключать первый класс и второй класс, то такая же проблема сохранится, поскольку они оба зависят друг от друга.
В моем учебнике говорится, что для решения этой проблемы вы используете форвардное объявление для второго класса. Я сделал это, но это не решает мою проблему. Затем я попытался разделить классы на отдельные файлы для каждого и использовать инструкции include в каждом и в основном файле, но это не сработало. Если это решение, может кто-то объяснить структуру этого решения?
Может кто-нибудь объяснить, как я могу заставить этот код работать? Для ясности ниже приведена проблема и мой код. Заранее спасибо.
Напишите программу на С ++, которая имеет класс времени и класс ожидания. Класс времени должен иметь целочисленные элементы данных, называемые часами, минутами и секундами, а класс 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