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

protected или не protected : ) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Дан Двухмерный массив.Определить: http://www.cyberforum.ru/cpp-beginners/thread325412.html
1) В каком столбце массива сумма элементов меньше: в первом или в последнем; 2) В какой строке массива сумма элементов больше: во второй или в третьей?
C++ Ошибка в конструкторе Написал задачу, но она не работает. Условие: Разработать класс Элементарная частица с элементами Название, Группа, Заряд, Масса покоя. Примеры значений переменной элементарная частица: Нейтрон Н 0 940 Ка-плюс М +1 494 Электрон Л -1 0.511 Написал код, но пишет что ошибка в конструкторе. Помогите найти проблему. По списку ошибок не могу сообразить. #include<iostream> http://www.cyberforum.ru/cpp-beginners/thread325384.html
C++ Перевод символа в Юникод
Подскажите пожалуйста как закодировать например вот такую строку привет что бы она стала такой? %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82 Википедии увидел такой алгоритм: 1)Переводим символ в Юникод. 2)затем разделяем каждый байт знаком процента подскажите как сделать первый пункт?
C++ что то не так с компилятором?
есть класс, который переписан с книги Лафоре Р. #include <cstdlib> #include <iostream> #include <conio.h> class time { private: int hrs, mins, secs;
C++ CreateFileA http://www.cyberforum.ru/cpp-beginners/thread325373.html
как записать путь.(нужно именно путь, а то так создает в папке приложения) HANDLE hfile1 = CreateFile("E:\res.txt", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL); по getlasterror() получаю 123 = Синтаксическая ошибка в имени файла, имени папки или метке тома. ответ найден (глупо!)
C++ Функции и модули двумерной матрицы Доброго всем дня. Дорогие пользователи форумом, пожалуйста помогите,завтра сдавать зачет по С++ а у меня 2 лабы еще не готовы. Вот задание: В каждой строке найти максимум среди четных элементов, а в каждом столбце минимум нечетных элементов. Необходимо использовать функции в 1-й, и модули во 2-й лабороторке. Ввод/вывод осуществляется в одном модуле/функции, вычисление в другом модуле/функции. подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16949 / 5354 / 330
Регистрация: 30.03.2009
Сообщений: 14,396
Записей в блоге: 26
25.06.2011, 09:58     protected или не protected : )
Из меня плохой советчик по подходам в Си++, потому как пока имею Си'шное мышление, но всё-таки свои соображения скажу. Size с позиции данных - это некая базовая вещь, которая независимо от того, как реализован производный класс, будет иметь один и тот же смысл. Поэтому поле size должно быть данными базового класса и устанавливаться только через методы базового класса. В том плане, что оно должно быть private. К тому же технически у тебя в программе будет только одна точка, которая обращается к этому полю, а в общем случае при программировании всегда желательно иметь минимальное количество процедур/методов, которые обращаются непосредственно к глобальным данным.

Что касается методов SetSize, GetSize, то в зависимости от реализации они могут меняться. Не по интерфейсу, но по внутреннему наполнению. Типа того, что при запуске SetSize помимо установки размера могут понадобиться какие-то дополнительные действия. При этом чтобы этот размер в конечном итоге установить, производному классу, даже после переопределения метода, придётся вызвать метод базового класса, что сократит некоторое количество вероятных ошибок по сравнению с случаем, когда у тебя поле size имеет доступ private

Исходя из этого мне кажется, что поле size должно быть private, а методы SetSize, GetSize - виртуальными. При этом при переопределении методов в производном классе выставляется требование, что необходимо вызывать данные методы базового класса. В итоге ты имеешь гибкость (производный класс как хочет, так и делает), но при этом сохраняется жёсткость (всё разнообразие в конечном счёте проходит через одну точку, где можно всех контролировать)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class IWindow 
{
public:
   virtual void setSize(int _size) { size = _size; };
   virtual int getSize() { return size; }
private:
  int size;
};
 
class SomeWindow : public IWindow 
{
public:
   virtual void setSize(int _size)
   {
      // Собственные действия
      ....
      IWindow::setSize(_size);
   };
};
 
Текущее время: 01:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru