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

Покритикуйте код - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ правильно записать выражения арифметические http://www.cyberforum.ru/cpp-beginners/thread359628.html
суть задания по фортрану и си записать выражения и посчитать их..я записала но результаты выходят разные.. помогите пожалуйста записать правильно задание моя запись на фортран Код:
C++ исправить функцию нахождения гласных букв в массиве Помогите,пожалуйста, исправить функцию, которая суммирует вероятности нахождения букв в строке(строка массив типа char,слова разделены пробелами). Если хотя бы в одном слове нет гласных букв,то... http://www.cyberforum.ru/cpp-beginners/thread359623.html
C++ Найти все простые числа на отрезке [a,b].
Изучаем C++ месяц. Сейчас сидим на циклах. Условие задачи, собственно, и есть название темы. К сожалению, справиться с ней у меня не получается. Нашел только в гугле программу которая выводит простые...
ln - ряд Тейлора C++
double ln(double x, double eps) { double T,S; int K; T=x; K=1; S=T; do{ K=K+1; T=-T*x/K; S=S+T;
C++ printf и scanf против cin и cout http://www.cyberforum.ru/cpp-beginners/thread359575.html
Друзья мои,стал учить плюсы и столкнулся с кучей противоречий. То что в С нет cin/cout я знаю. Но вот в С++ возможно использование printf/scanf. Объясните мне разницу этих операторов. Из того,что я...
C++ Помогите с макросом нужно написать макрос(если это возможно) сейчас у меня код выглядит так: std::cin<<a<<b<<c; а после обработки должно выглядить так if(read)std::cout<<a<<b<<c; write(a);write(b);write(с); ... подробнее

Показать сообщение отдельно
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
02.10.2011, 23:56
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class iterator
    {
        Students::ListItem* current;
 
        //...
 
        public:
        string first(){correct();return current->fullname;}
        string second(){correct();return current->group;}
        int third(){correct();return current->year;}
        int four(){correct();return current->average;}
     
        //...
Ну кто же так делает... Сделайте класс CStudent:

C++
1
2
3
4
5
6
7
8
9
10
class CStudent
{
public: // вообще не public, но для примера
    string fullname;
    string group;
    int year;
    int average;
 
    Student(); // ....
};
В ListItem:

C++
1
2
3
4
5
6
7
class ListItem
{
public:
    CStudent student;
    ListItem * next;
    // .....
}
В iterator:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class iterator
{
   ListItem *ptr;
 
public:
   iterator( ListItem *_p = 0 ) : p(_p){};
   iterator( const iterator &it ) : p( it.p ){};
 
   //...
 
   CStudent & operator*(){ return ptr->student; }
 
   //...
}
И дальше доступ:

C++
1
2
3
4
5
6
7
8
9
10
11
Students::iterator it = lst.begin();
 
(*it).fullname = "Ivan Ivanov";
it++;
 
if( it != lst.end() )
{
   (*it).fullname = "Basil Pupkin";
}
 
//...
Добавлено через 7 минут
Итератор - это средство доступа к элементу списка. Элементом списка является CStudent. А всякие там подробности реализации в виде указателя на следующий элемент оставьте внутри класса, пользователю класса их знать не обязательно. Итератор при "разыменовывании" возвращает ссылку на CStudent, с которым пользователь уже и работает. CStudent сам обеспечивает себя функциями доступа к fullname, year и прочим полям. Это не забота итератора. Итератор занимается обходом списка и не должен вникать в реализацию CStudent. Он должен просто возвращать ссылку на него и всё.

А у вас итератор является интерфейсом доступа к студенту, а студент - это некая абстрактная сущность, которая весьма посредственно выделена из общей серой массы содержимого элемента списка. А что, если я захочу часть студентов загнать во внешний массив, или ещё что-то с ними сделать? Да элементарно, почему при изменении структуры студента я должен менять класс итератора списка?

Как говорил умный дядя Страуструп, если вы думаете об этом как об отдельной сущности, создайте для этого класс. Рассматривайте студента как одну, самостоятельную сущность, список - как другую, элемент списка (который содержит студента) - как третью, а итератор списка - как четвёртую. Чётко разграничьте полномочия.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru