Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
1

насколько это соответствует стандарту?

29.12.2012, 05:53. Показов 778. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
 
class shit
{
private:
    int x;
public:
    shit(){}
    shit(int p) { x = p; }
    void set (int* y) { x = *y; }
    int* get() { return &x; }
};
 
 
int main ()
{
    shit a(0), b(1);
 
    a.set (b.get());
 
    std::cout << *a.get () << *b.get () << '\n';
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2012, 05:53
Ответы с готовыми решениями:

Соответствует ли код стандарту?
Привет! Имеется следующий код (в очень урощенном виде) struct foo {}; int main() { struct...

Комментирование программ. Насколько это важно?
Поделитесь собственным опытом.

Соответствует ли это стандарту С?
В Visual Studio и в CodeBlocks такой код компилируется с предупреждением. #include &lt;stdio.h&gt;...

какому стандарту С++ соответствует minGW
Здравствуйте! У меня возникла такая проблема: я сейчас изучаю С++ и компилирую программы с помощью...

11
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
29.12.2012, 06:02 2
Давайте для тупых: при чем тут стандарт и что конкретно смущает в коде?
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
29.12.2012, 06:06  [ТС] 3
поправочка
C++
1
void set (int* y) { *y = x; }
Добавлено через 1 минуту
Цитата Сообщение от 0x10 Посмотреть сообщение
Давайте для тупых: при чем тут стандарт и что конкретно смущает в коде?
изменение поля private одного объекта, методом вызова другого объекта.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
29.12.2012, 06:08 4
не знаю как на счет стандарта, но идея ООП нарушена. Зачем Вам приватная переменная, если Вы даете к ней доступ?
1
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
29.12.2012, 06:09 5
Вполне допустимо. Спецификаторы доступа всего лишь ограничвают возможность прямого обращения к полям объекта. В данном случае - вернули адрес, с помощью указателя делаем что хотим, все ок.
1
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
29.12.2012, 06:12  [ТС] 6
спасибо. Я уже поняла, что поле private это защита от собственных ошибок, а не внешних угроз. Иначе говоря единицей защиты является не объект, а тип.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
29.12.2012, 06:16 7
Цитата Сообщение от 0x10 Посмотреть сообщение
В данном случае - вернули адрес, с помощью указателя делаем что хотим, все ок.
Тем самым нарушив инкапсуляцию. Теперь можно с этой переменной делать все что угодно, а значит можно нарушить состояние объекта
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
29.12.2012, 06:20 8
activnaya, если хотите защититься в данном случае, используйте указатели на константу.

Добавлено через 49 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
Тем самым нарушив инкапсуляцию. Теперь можно с этой переменной делать все что угодно, а значит можно нарушить состояние объекта
Конечно. Но тут вопрос не в том, правильно ли так делать, а в том, должен ли вообще данный код работать так, как работает.
0
256 / 46 / 4
Регистрация: 24.11.2012
Сообщений: 466
29.12.2012, 06:31  [ТС] 9
Цитата Сообщение от 0x10 Посмотреть сообщение
а в том, должен ли вообще данный код работать так, как работает
ну моя логика такова: поле private изменяется с помощью метода класса, а метод класса имеет доступ к полю private, следовательно не имеет значения из какого именно объекта был вызван метод и это совершенно "законно".

Добавлено через 2 минуты
а вообще все глобальней, ну как я в #6 писала.
0
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
29.12.2012, 07:01 10
Цитата Сообщение от Croessmah Посмотреть сообщение
Тем самым нарушив инкапсуляцию. Теперь можно с этой переменной делать все что угодно, а значит можно нарушить состояние объекта
мб инкапсуляция нарушена, но я вот приват даю опасным полям, как массив, и обеспечиваю к ним доступ через get/set с проверкой индекса, по моему все логично, либо если переменной нужен обработчик какой либо, по этому вроде все нормально у ТС'а
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.12.2012, 14:53 11
Цитата Сообщение от Croessmah Посмотреть сообщение
не знаю как на счет стандарта, но идея ООП нарушена.
Ну во первых так можно писать только для поддержания общего интерфейса кода
Во вторых, не нарушена если get() и set() сделать виртуальными, а в производных классах добавить обработку последействий и проверок.

Единственное что смущает: почему через указатели ?

Добавлено через 4 минуты
C++
1
2
void set(int y) { x = y; } 
int& get() {  return x; }
Тут тип int а не структура так что быстрее не будет...
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
16.01.2013, 00:38 12
activnaya, вообще возвращая указатель стоит задуматься о добавлении спецификатора const.
Цитата Сообщение от activnaya Посмотреть сообщение
насколько это соответствует стандарту?
Лень лезть в стандарт. Но по моему ничего такого нет. Указатель валидный. int x; не объявлено как const.
Просто объект это что. Это как набор полей. Мы имеем указатель на объект. Как правиль зачастую первое поле это скрытый член указатель на vtable. Поэтому обычный метод в машинном представлении - это его адрес и при вызове мы просто делаем call(не jmp). У поля тоже есть адрес.

Добавлено через 3 минуты
Даже такой код прокатит. Но здесь все очевидно.http://ideone.com/5i96VN
0
16.01.2013, 00:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2013, 00:38
Помогаю со студенческими работами здесь

Какова вероятность того, что устройство соответствует стандарту?
На заводе 95% аппаратуры выдерживает испытание. Из прошедших испытание устройств 97% соответствует...

Насколько приведенная абстрактная реализация соответствует шаблону MVVM
Интересно бы узнать на сколько абстрактная реализация ниже соответствует шаблону MVVM. ...

Насколько это реально???
есть ли какаянить прога чтоб из песни делать минусовку??? Это вообще реально???

Редирект. Насколько это законно?
Уважаемые Мастера B-) , к Вам вопрос. Возникла необходимость сделать переадресацию (редирект) на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru