С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
grayscale
1 / 1 / 1
Регистрация: 12.04.2013
Сообщений: 34
#1

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

01.06.2014, 02:34. Просмотров 464. Ответов 6
Метки нет (Все метки)

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;
}
Работает. Тут совсем все плохо с точки зрения здравого смысла, или так можно делать? Или грамотней будет сделать дружественный метод класса В в классе А?

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

Является ли правилом хорошего тона отделение данных от логики? - C++
Скажите, отделение данных от логики действительно явл. правилом хорошего тона в с++ ? Что-то я не видел, чтобы в других яз. это...

Статический указатель класса и конструктор в private - C++
Всем привет! Вчера препод показал один прием, я до конца не могу понять как он работает. В классе есть статический указатель class...

std:: - правило хорошего тона,или? - C++
часто встречается разный код,где одно и тоже пишется по разному: int n; cin &gt;&gt; n; cout &lt;&lt; n; или так: int...

Правило хорошего тона: отделение ввода-вывода C++ - C++
Добрый день. Собственно про MVC модель препод рассказывает, но на пальцах, понять сложно мне почему-то, примеров конкретных не приводит. ...

Указатель на функцию-член одного класса в другом классе - C++ - C++
Добрый вечер! Может кто-то может помочь с проблемой. class Cook { public: void _cook_dish(Dish cook_dish_id) { ... ...

Реализация метода с private секции - C++
Добрый вечер, #pragma once #include &lt;string&gt; class Foo { private: ...

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

Работа с классами (в главном классе создать указатель на экземпляр другого класса) - C++
Недавно начал изучение С++, в частности ООП. В связи с чем у меня есть вопрос как в главном классе можно создать указатель на экземпляр...

Обращение к методам класса через указатель на экземпляр класса - C++
Добрый день. Не могу осилить проблему: Описан абстрактный класс. Описаны наследники этого класса уже без абстрактности. Описан...

Вопрос "хорошего тона", "стиля" в программировании - правильное использование #include - C++
Привет. Вступление. Имею небольшой опыт в программировании. Сейчас мне дали разобрать один проект, как пример работы HGE и Box2D. ...

Изменение информации в дочернем классе, через ссылку - C++
Подскажите, есть класс class Class1 В конструкторе я создаю структуру, которая будет хранить в себе ссылки на все классы...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.