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

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

Войти
Регистрация
Восстановить пароль
 
pajah
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 4
#1

Проектирование класса - C++

02.11.2013, 15:51. Просмотров 496. Ответов 10
Метки нет (Все метки)

Доброго времени суток. Имеется класс Player, в нём — приватный объект типа Settings.
Как наиболее лаконично обратиться извне к публичным методам Settings?
C++
1
2
3
4
5
6
7
8
9
10
class Settings {
private:
  // Около 100 переменных
public:
  // Геттеры и сеттеры для этих переменных
};
 
class Player {
  Settings settings;
};
Из вариантов — для Player создать публичную функцию:
C++
1
Settings getSettings() { return settings; }
Но такой путь будет слишком накладным (учитывая, что класс Settings довольно увесист). Может, имеются какие-нибудь подходящие для этой задачи шаблоны проектирования?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 15:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проектирование класса (C++):

Проектирование и реализация класса - C++
Кто знает как написать программу на тему микроволновая печь скажите плиз!!!! Микроволновая печь Свойства: • состояние (вкл. /...

Проектирование класса Стек Растений - C++
Стек Растения 1. Добавление элемента 2. Удаление элемента 3. Поиск по ключу 4. Вывод всех элементов на экран

Проектирование класса Matrix и его использование - найти ошибки в коде - C++
Задание было следующим. Проектирование класса Matrix (матрица). Как минимум, объекты этого класса должны создаваться; "пустые"...

Проектирование ОО архитектуры - C++
Интересно мнение публики. "Программирование в терминах интерфейсов" Вопрос такой: как правильно конструировать едино-образный интерфейс? ...

Проектирование программы - C++
Здравствуйте! Подскажите пожалуйста, какими средствами эффективнее проектировать и рекодить программу? Тема стала актуальна с...

курсовое проектирование на с++ - C++
21. В цехе находятся 8 станков. Каждый станок имеет свое время обработки заготовки и свое количество материала в кг., уходящего в отходы....

10
0x10
2483 / 1658 / 249
Регистрация: 24.11.2012
Сообщений: 4,132
02.11.2013, 16:03 #2
Settings точно должны быть частью Player'a?
А так, вернуть можно указатель или ссылку, чтобы избежать копирования.
1
pajah
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 4
02.11.2013, 16:20  [ТС] #3
Да, Settings — это настройки именно для Player в удобной обёртке.
В указатель завернуть можно, но тогда нарушается инкапсуляция — settings станет доступным для записи, что нехорошо.
0
0x10
2483 / 1658 / 249
Регистрация: 24.11.2012
Сообщений: 4,132
02.11.2013, 16:30 #4
Указатель на константу. Или указатель на константный интерфейс. Вроде
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct ISettings {
    virtual int get_param_a() const = 0;
    virtual int get_param_b() const = 0;
    virtual int get_param_b() const = 0;
};
 
typedef /* bla bla */ ISettingsPtr;
 
class Player {
public:
    ISettingsPtr getSettings() const;
};
Добавлено через 7 минут
Upd: лучше просто указатель или ссылку на константу. Писанины меньше. Хотя... По вкусу.
Для параноиков можно класс Settings сделать приватным внутри Player, а наружу выставить только интерфейс ISettings.
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.11.2013, 16:39 #5
0x10, виртуального деструктора не хватает.
2
Max Dark
02.11.2013, 16:44
  #6

Не по теме:

Цитата Сообщение от pajah Посмотреть сообщение
Доброго времени суток. Имеется класс Player, в нём — приватный объект типа Settings.
C++
1
  // Около 100 переменных
не Писец ли?
как по мне жирненький такой

0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.11.2013, 16:49 #7
А есть ли в Settings связанные друг с другом переменные, или они все не зависят друг от друга?
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
02.11.2013, 17:03 #8
C++
1
const Settings& getSettings() const { return settings; }
и никаких накладных расходов. т.е. возвращаем не копию, а ссылку
1
pajah
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 4
02.11.2013, 17:37  [ТС] #9
Цитата Сообщение от Tulosba Посмотреть сообщение
А есть ли в Settings связанные друг с другом переменные, или они все не зависят друг от друга?
Нет, переменные независимы.
Цитата Сообщение от Cra3y Посмотреть сообщение
не Писец ли? как по мне жирненький такой
В РПГ-игре использую класс для описания всевозможных параметров персонажа, отсюда и такое огромное количество равнозначных переменных. Можно, конечно, воспользоваться ассоциативными массивами, но нужно ли?

Действительно, в этой гонке за сокрытием данных я совсем забыл про ссылки. Можно попробовать и вариант с указателями и поиграться там с const.
0x10, Tulosba, I.M. — всем спасибо!
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.11.2013, 17:42 #10
Цитата Сообщение от pajah Посмотреть сообщение
Нет, переменные независимы.
Тогда, почему бы не использовать простую структуру, без методов доступа? Если, конечно, не нужно какие-то хитрые действия (логирование например) выполнять при чтении/установке.
1
pajah
0 / 0 / 0
Регистрация: 02.11.2013
Сообщений: 4
02.11.2013, 17:49  [ТС] #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Тогда, почему бы не использовать простую структуру, без методов доступа?
При изменении каждого отдельного свойства происходит вывод на экран соответствующего сообщения. Но на досуге попробую слегка изменить логику программы — со структурами действительно было бы проще.
0
02.11.2013, 17:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 17:49
Привет! Вот еще темы с ответами:

Проектирование классов - C++
Доброго здравия жителям Земли. Вопрос таков: нужно ли в своём проекте жёстко скрывать реализацию классов, городить кучу интерфейсов как...

Проектирование технологических установок - C++
Помогите решить задачу,вроде несложнач ,но не понимаю,что делать

Проектирование таблиц с данными - C++
В лабораторной сказано что нужно создать таблицу в которой будут столбцы "имя студента", "номер группы", "экзамены". столбец экзамен...

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


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

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

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