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

О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель - C++

Восстановить пароль Регистрация
 
grayscale
1 / 1 / 1
Регистрация: 12.04.2013
Сообщений: 34
01.06.2014, 02:34     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель #1
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
 
using namespace std;
 
class A
{
    int *a;
 
public:
    A()
    {
        a = new int;
        *a = 3;
    }
 
    int* geta()
    {
        return a;
    }
};
 
class B
{
public:
    int b;
    B(int *c)
    {
        b = *c;
        *c = 7;
    }
};
 
int main()
{
    A cla;
    B clb(cla.geta());
    std::cout << clb.b << " " << *cla.geta();
    return 0;
}
Работает. Тут совсем все плохо с точки зрения здравого смысла, или так можно делать? Или грамотней будет сделать дружественный метод класса В в классе А?

На самом деле, столкнулся с ситуацией, что мне нужно модифицировать данные в одном классе, но логика этого "модифицирования" спрятана в другом классе. Как лучше всего это делать?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2014, 02:34     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель
Посмотрите здесь:

C++ std:: - правило хорошего тона,или?
Вопрос "хорошего тона", "стиля" в программировании - правильное использование #include C++
Статический указатель класса и конструктор в private C++
C++ Работа с классами (в главном классе создать указатель на экземпляр другого класса)
Обращение к методам класса через указатель на экземпляр класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
01.06.2014, 07:41     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от grayscale Посмотреть сообщение
Тут совсем все плохо с точки зрения здравого смысла
Ну а Вы почитайте что происходит в функции main - и ответ на вопрос сам собой придет.
Создали объект класса А. Создали объект класса Б с использованием данных из объекта А. Бум - внезапно состояние объекта А изменилось.
1. Дружественность тут не нужна. Если необходимо менять состояние объекта - пишите методы для этого, из объявления которых будет ясна семантика.
2. Нужно ли, чтобы объекты А и Б существовали независимо? Возможно, объект А должен быть приватной частью Б.
В общем, без контекста сложно предложить что-то вменяемое. Какая конкретно задача решается?
grayscale
1 / 1 / 1
Регистрация: 12.04.2013
Сообщений: 34
01.06.2014, 19:32  [ТС]     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель #3
0x10,
Конкретно, в классе, скажем, А, хранится большой спиcок, list<структура>. в классе В спрятана логика заполнения этого списка. Как проще и правильней связать класс В и этот список? А если мне нужно, чтобы список был в private-секции? Хотя на самом деле я пишу и понимаю, что изначально поступил не правильно, ибо класс А логике должен включать в себя как список, так и методы работы с ним. Я прав?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
01.06.2014, 19:36     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель #4
Цитата Сообщение от grayscale Посмотреть сообщение
класс А логике должен включать в себя как список, так и методы работы с ним. Я прав?
При такой постановке это кажется логичным.
grayscale
1 / 1 / 1
Регистрация: 12.04.2013
Сообщений: 34
01.06.2014, 19:37  [ТС]     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель #5
Пишу первый более-менее сложный проект, прошу судить мои вопросы строго, но справедливо. Честно говоря, не совсем пока понимаю, как правильно выстраивать структуру всего проекта, что лучше инкапсулировать в классы, а что нет, и т.п.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.06.2014, 20:44     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель #6
Цитата Сообщение от grayscale Посмотреть сообщение
На самом деле, столкнулся с ситуацией, что мне нужно модифицировать данные в одном классе, но логика этого "модифицирования" спрятана в другом классе. Как лучше всего это делать?
http://*******/p1gNJh
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2014, 21:56     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель
Еще ссылки по теме:

Является ли правилом хорошего тона отделение данных от логики? C++
Изменение информации в дочернем классе, через ссылку C++
C++ Правило хорошего тона: отделение ввода-вывода C++

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

Или воспользуйтесь поиском по форуму:
grayscale
1 / 1 / 1
Регистрация: 12.04.2013
Сообщений: 34
01.06.2014, 21:56  [ТС]     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель #7
Jupiter, вам надо было отправить ссылку на шаблоны проектирования в целом) оказывается, я с ними не знаком вообще. Спасибо!
Yandex
Объявления
01.06.2014, 21:56     О правилах хорошего тона в C++: изменение данных из private секции класса А в классе В через указатель
Ответ Создать тему
Опции темы

Текущее время: 07:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru