Форум программистов, компьютерный форум, киберфорум
Наши страницы

STL std::set, std::pair, std::make_pair - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как написать макрос - модуль числа... http://www.cyberforum.ru/cpp-beginners/thread157244.html
Помогите написать макрос на с++, возвращающий модуль числа... Добавлено через 4 минуты Нашёл..
C++ Изменение значения статической переменной не дает =\ static char text; text = ""; error: expression must be a modifiable lvalue это же не конст, а просто статик, в pawn"е часто пользовался static и ок всё было http://www.cyberforum.ru/cpp-beginners/thread157228.html
Часы в псевдографике C++
доброго времени суток. задание заключается в написании программы, отображающую на экране текущее время в виде циферблата с секундной,минутной и часовой стрелками(разных цветов). и сохранять...
Модификация объекта string через ссылку и указатель C++
Создайте две функции: первая должна получать аргумент типа string*, вторая - srting&. Каждая функция должна изменять объект string своим способом. В функции main сопсно вызываем и выводим изменёные...
C++ Определить в какой четверти будет больше всего точек из 10 введенных. http://www.cyberforum.ru/cpp-beginners/thread157138.html
Задание такое: Ввести 10 раз координат х, у и определить в какой четверти их будет больше всего. Вот мой код#include <stdafx.h> #include <cmath> #include <iostream> using namespace std; void...
C++ Уведомление об ошибке в функции... Есть функция которая в процессе выполнения получает значение t, если (t < 0) значения нет. Как уведомить об этом пользователя функции? Если сделать доп. функцию проверки, то вычисления будут... подробнее

Показать сообщение отдельно
fasked
Эксперт С++
4963 / 2543 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
05.08.2010, 13:04
Цитата Сообщение от outoftime Посмотреть сообщение
как называются разделы, в которых у меня были ошибки?
во-первых, как выше уже говорилось, пытайтесь всунуть const где только можно.
если метод не будет изменять данные класса, определяйте его как const. если аргумент метода не будет изменяться в методе - определяйте его как const.
теперь пройдемся по вашему коду. конструктор класса
C++
1
tree(std::string);
конструктор класса дерево принимает строку - имя дерева. почему она не константа? она же всего лишь копируется в строку в классе.
на этом же месте, почему аргумент является объектом, а не ссылкой на объект? это лишнее копирование. раз аргумент у нас константный, то изменяться он не может, следовательно можно смело передавать строку по ссылке, а не по значению.
в итоге применив все замечания мы получаем нормальный прототип конструктора:
C++
1
tree(const std::string&);
далее рассмотрим метод, который возвращает имя
C++
1
std::string getName();
он тожн должен быть константным, ведь он не изменяет данные класса. вернее не должен их изменять. в итоге получаем такой прототип:
C++
1
std::string getName() const;
в общем вот эти два косяк разбросаны по всему классу. то есть методы getHeight, getAge - тоже должны быть определены константой, так же как и операторы сравнения. операторы сравнения кстати так же должны принимать константную ссылку на объект типа дерево, а не сам объект.

ну и две неинициализированные статические переменные. кстати совершенно незачем инициализировать их в конструкторе. я забыл совсем про этот момент то есть заметил только сейчас. инициализируйте их вот так, только значения свои поставьте:
C++
1
2
double tree::incA = 5.0;
double tree::incH = 5.0;
и если они не изменяются может стоит сделать их константами

в классе леса в принципе все те же самые косяки, за исключением одного метода. в методе getTreeList пришлось сделать const_cast. чтобы указатель все таки скопировался. не знаю зачем кстати этот метод. с указателями в С++ лучше не баловаться.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru