в си++ такие баги обычно вызваны проблемами с памятью которые могут проявиться а могут и не проявиться.
к примеру
bool b; в большистве случаев будет true но в одном из 255 будет false;
добавили в код новую переменную. Компилятор по-другому расположил данные, и тут ваша b становится false.
так как параметр передается по значению то такой код корректен. В результате мы получаем простую и легкочитаемую запись в заголовке — а в теле функции страхуем себя от случайного изменения значения переменной.
Далее.
Если вы хотите объявить const поле класса, то инициализировать его обязательно списком инициализации ( так же как и ссылки )
class B
{
const int constValue;
public:
B(int&);
};
B::B()
:constValue(33)
{}
в противном случае если вы попробете сделать это в теле конструктора — получите ошибку.
В данном случае случше лучше всего руководствоваться следующим примером
аналог инициализации в теле конструктора ( между {} )
int x;
x=5;
аналог инициализации списоком инициализации ( после :)
int x = 5;
именно поэтому для инициализации констант и ссылок в качестве полей класса подходит только список инициализации
то что написали молодец. Уважаю. Хочу показать вам еще несколько недостатков вашей программы ( и то как ее можно улучшить ).
класс Answer
1. передача параметра по указателю — так как вам на самом деле нужна простая копия — проще передавать по констатной ссылке
Answer(const QString& s)
Далее. Внутри класс QString — умный указатель. Это значит что расходы на копирование объектов малы. Так-что в принципе можно передавать его по значению.
именно так я и сказал начальству когда меня спрашивали далеко ли хочу идти. Тим-лид мой потолок. Потому что мне интересны проекты, программы и мои коллеги, а не сроки и клиенты.
при отключенных скриптах выдает нечто не менее шедевральное
На нашем сайте используется внедрённый •ШРИФТ• («машинка Москва»).
В броузере MS Internet Explorer внедрённые шрифты работают, в неполноценных
броузерах могут не поддерживаться. При «Сохранении» страниц с этим шрифтом
СКАЧАЙТЕ его с www.eniology.ktk.ru/MOCKBA.eot (19 Kb) и положите его
РЯДОМ с сохранённой Web-страницей (РЯДОМ с HTML-файлом). Должны быть
ВКЛЮЧЕНЫ рисунки (без них НЕ увидите надписи на кнопках), анимация, аудио,
JAVA (апплеты). Если кнопки НЕ работают: I) РАЗРЕШИТЕ открытие новых окон (в
меню «Сервис»); II) ВКЛЮЧИТЕ заблокированное содержимое, кликнув левой
кнопкой мыши по центру полоски отключалки вверху страницы и нажав «Включить
заблокированное содержимое». ·НИЧЕГО· опасного на нашем сайте НЕТ; открытие
страниц в новых окнах НЕ может вторгнуться в настройки “АктивКома”. Можете
проверить любыми антивирусами.
для синхронизации с женой мне нехватает фукнционала гугла. Поэтому мы с женой используем trac — он позволяет запланировать кто будет готовить обед а кто пойдет выгуливать детей, сложности каждой из задач и блокирующие таски. Чорт опять эти люди в белых хала....(рукопись обрывается )
к примеру
bool b; в большистве случаев будет true но в одном из 255 будет false;
добавили в код новую переменную. Компилятор по-другому расположил данные, и тут ваша b становится false.
class A
{
void f(int);
};
void A::f(const int);
так как параметр передается по значению то такой код корректен. В результате мы получаем простую и легкочитаемую запись в заголовке — а в теле функции страхуем себя от случайного изменения значения переменной.
Далее.
Если вы хотите объявить const поле класса, то инициализировать его обязательно списком инициализации ( так же как и ссылки )
class B
{
const int constValue;
public:
B(int&);
};
B::B()
:constValue(33)
{}
в противном случае если вы попробете сделать это в теле конструктора — получите ошибку.
В данном случае случше лучше всего руководствоваться следующим примером
аналог инициализации в теле конструктора ( между {} )
int x;
x=5;
аналог инициализации списоком инициализации ( после :)
int x = 5;
именно поэтому для инициализации констант и ссылок в качестве полей класса подходит только список инициализации
класс Answer
1. передача параметра по указателю — так как вам на самом деле нужна простая копия — проще передавать по констатной ссылке
Answer(const QString& s)
Далее. Внутри класс QString — умный указатель. Это значит что расходы на копирование объектов малы. Так-что в принципе можно передавать его по значению.
Вы создали три конструктора, когда хватило бы одного.
Answer(const QString& a="", bool c=false);
Answer::Answer(const QString& a, bool c)
:correct©, text(a){}
методы isCorrect() и getText() не меняют состояние объекта а значит могут быть сделаны константными
bool isCorrect() const;
так как поля correct и text после конструктора нигде не меняются — их тоже можно объявить константыми в объявлении класса: const boo correct;
в целом это все недостаточное знание языка, что надеюсь у вас ненадолго =)
эээ а почему?
На нашем сайте используется внедрённый •ШРИФТ• («машинка Москва»).
В броузере MS Internet Explorer внедрённые шрифты работают, в неполноценных
броузерах могут не поддерживаться. При «Сохранении» страниц с этим шрифтом
СКАЧАЙТЕ его с www.eniology.ktk.ru/MOCKBA.eot (19 Kb) и положите его
РЯДОМ с сохранённой Web-страницей (РЯДОМ с HTML-файлом). Должны быть
ВКЛЮЧЕНЫ рисунки (без них НЕ увидите надписи на кнопках), анимация, аудио,
JAVA (апплеты). Если кнопки НЕ работают: I) РАЗРЕШИТЕ открытие новых окон (в
меню «Сервис»); II) ВКЛЮЧИТЕ заблокированное содержимое, кликнув левой
кнопкой мыши по центру полоски отключалки вверху страницы и нажав «Включить
заблокированное содержимое». ·НИЧЕГО· опасного на нашем сайте НЕТ; открытие
страниц в новых окнах НЕ может вторгнуться в настройки “АктивКома”. Можете
проверить любыми антивирусами.