Const ссылки для выставления полей

У меня есть класс Дата. пусть дата будет:

class Date
{
private:
unsigned int _day;
unsigned int _month;
unsigned int _year;
public:
const unsigned int& Day;
const unsigned int& Month;
const unsigned int& Year;

Date() : Day(_day), Month(_month), Year(_year)
{  }
}

По какой-то причине после того, как конструктор называется Day, Month и Year, не указывайте / ссылайтесь на _day, _month и _year.

Одно из моих предположений состояло бы в том, что они устанавливаются до того, как память будет выделена классу. Как мне решить эту проблему (иначе говоря, установить ссылки после выделения памяти)?

Заранее спасибо!

РЕДАКТИРОВАТЬ: Больше информации

Значение _day (например,) не возвращается, когда я получаю значение Day. Я получаю, казалось бы, случайное число.

1

Решение

Не очень понятно, чего вы хотите достичь. В вашем классе Дата вы можете получить доступ _date, _month, _year напрямую, почему вы хотите установить другую ссылку?

Но чтобы ответить на ваш вопрос

Значение _day (например,) не возвращается, когда я получаю значение Day. Я получаю, казалось бы, случайное число

На самом деле значения возвращаются, но вы получаете мусор, потому что _day, _month и _year — просто неинициализированные целые числа. Вам нужно сначала инициализировать их в списке инициализаторов:

Date() : _day(0), _month(1), _year(2), Day(_day), Month(_month), Year(_year)
4

Другие решения

Вы должны выставлять их, используя методы получения, возвращающие константные ссылки, чтобы избежать необходимости их хранить, это гораздо удобнее.

class Date {
private:
unsigned int _day;
unsigned int _month;
unsigned int _year;

public:
const unsigned int& Day(){return _day;}
const unsigned int& Month(){return _month;}
const unsigned int& Year(){return _year;}
}
1

Date::Date(unsigned int myDay, unsigned int myMonth, unsigned int myYear)
{
//Assign values here in constructor.
}

Вы можете написать отдельные методы для возврата дня, месяца или года в классе или любой их комбинации для любых других форматов дат, которые вы запланировали в дизайн-документе.

0
По вопросам рекламы [email protected]