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

Свойства класов - зачем помещать свойство в приват - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Error C2668: sqrt: неоднозначный вызов перегруженной функции http://www.cyberforum.ru/cpp-beginners/thread536026.html
Что не так? Ma= sqrt ((2*b^2 + 2 * c^2 - a^2)/4); Mb= sqrt ((2*a^2 + 2 * c^2 - b^2)/4); Mc= sqrt ((2*a^2 + 2 * b^2 - b^c)/4); 1>------ Построение начато: проект: dz, Конфигурация: Debug Win32 ------ 1> dz.cpp 1>c:\users\михаил\documents\visual studio 2010\projects\dz\dz\dz.cpp(16): error C2668: sqrt: неоднозначный вызов перегруженной функции
C++ Найти среднее арифметическое елементов каждого из непарных столбцов матрицы Размерность матрицы вводить самому http://www.cyberforum.ru/cpp-beginners/thread536016.html
istream_iterator C++
Добрый день, уважаемые форумчане! Прошу ответить на следующий вопрос - почему, когда создается istream_iterator пустым конструктором (например, в алгоритме copy для указания конца потока/файла), то вызывается конструктор объекта того класса, который мы передаем в качестве шаблонного аргумента?? Т.е., почему он вообще вызывается? Пример: .... class Test { public: Test() { cout <<...
Вложенные циклы. Вычисление двойной суммы. C++
#include<stdlib.h> #include<stdio.h> #include<math.h> long factor(int k) {long res; if((k==1)||(k==0)) res=1; else res=factor(k-1)*k; return res; }
C++ Как сделать выход из программы при условии выполнения предписания? http://www.cyberforum.ru/cpp-beginners/thread535999.html
Смысл кода: вводим столь-ко то значений и находим из них максимальное. Как сделать так, чтоб, когда вводимое значение было равно "-1", то программа завершалась? #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; int main() { setlocale(LC_CTYPE, "Russian");
C++ Скопировать строку в переменную Здравствуйте, программа читает txt файл, в нем есть несколько строк, я хочу записать содержимое 2(для примера) строки в переменную. Меня направили почитать об std::string и std::getline, там не нашел ответа, хотя может быть что-то упустил(с английским не очень хорошо). В google нашел вариант с использованием boost::spirit, но он очень тяжелый для новичка. На чем я остановился: main.cpp... подробнее

Показать сообщение отдельно
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 1
02.04.2012, 18:40     Свойства класов - зачем помещать свойство в приват
[QUOTE]IDrawer::draw(const std::shared_ptr<Shape>& shape);[QUOTE]
Ой, вот только не надо этих извращений. Мы на первых страницах определились, что программа пишется в одиночку, и не претендует на звание "универсальногововсесторонырасширяемого движка".
Смысл тогда плодить в ней сущности?
В том, что draw это часть интерфейса и должна быть методом. Более того, виртуальными могут быть только методы, а draw это именно виртуальный метод (то, что у тебя не виртуальный, это упущение при проектировании, ты бы исправил эту ошибку чуть позже).
Ой, теперь ещё одна тема разговора появилась, про виртуальные функции.
Давай не будем о них, об интерфейсах и виртуальности. просто потому что нигде не сказано, что у меня класс Shape абстрактный и взят из известного Страуструпповского примера. Может я имел в виду вполне конкретный Шейп?
(то, что у тебя не виртуальный, это упущение при проектировании, ты бы исправил эту ошибку чуть позже)
Ну почему же ошибка. Применение чисто виртуальных функций не самое широкое. Изредка создаёшь интерфейс поведения для какого-нибудь класса объектов. Изредка создаёшь какой-нибудь список разносортных объектов для отрисовки. Но это довольно узкоспециализированная область применения.
Ты не открываешь к ним доступ. Там выше где-то был пример с полями a,b,c
Да это я писал, как одно из редких применений приватных полей, на мой взгляд. Не помню, где я прочитал этот пример. Казалось в Страуструпе, но сейчас проверил - там нет. И на мой взгляд, не такое уж бесполезное. Например, если C равно не сумме, а какой-то сложной функции от а и б, которую все хотят получить, а а и б при этом редко изменяются.
А что бы пришлось делать, если бы непосредственно обращение происходило к полю с?
Вот и я спрашиваю, что? Ну переписали бы осращение к нему из item.c в item.getc() или на что там ты хотел заменить? более того, заменять всё равно придётся, а от того, что функция getC изменится в ходе разработки с int getC(){return C;} на int getC(){cerr<<"Megafatalerror";return -1;}тем кто использует эту функцию легче не станет. Всё равно ошибку придётся исправлять рано или поздно.
А теперь представь, что это всё происходит в dll, которой пользуется куча народа.
Я не писал ещё dll, которой пользуется куча народу. Более того, я видел примеры классов, которыми НЕ пользуется куча народа, а у автора всё равно не проходит private синдром: добавить поритруемости, масштабируемости... А может не надо нам так трясти этим прям везде-везде?
Представьте, что у вас есть класс и вам нужен триггер на изменение какого-то из полей. Что вы будете делать? Будете выворачивать свой класс наизнанку и каждый раз заново расписывать аналог триггера или же просто в сеттере вызовите нужный обработчик?
Да, здесь добавлю сеттер, а затем выверну код наизнанку, добавляя его использование. не так и много времени это займёт, пожалуй.
Но мне всё равно кажется, что такие механизмы, как использование триггеров, планируются до того, как мы решили создавать этот класс.
 
Текущее время: 22:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru