Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
75 / 26 / 22
Регистрация: 22.06.2013
Сообщений: 127

Как дополнить функционал класса из другого класса

16.10.2015, 12:38. Показов 1961. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот допустим, написал я класс TMatrix (матрица), можно добавлять строки, столбцы, есть capacity и прочие ништяки. Всё отлажено и отлично работает.
Дальше пишу класс, который содержит в себе матрицу:
C++
1
2
3
4
5
6
7
class My
{
protected:
    void ChangeMatrixCount(int RowCount, int ColCount);
public:
    TMatrix <int> Matrix;
}
Пользователь My может напрямую работать с Matrix, но мне нужно, чтобы всякий раз, когда в Matrix изменяется количество строк или столбцов автоматически вызывалась функция ChangeMatrixCount(int RowCount, int ColCount); Как это сделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.10.2015, 12:38
Ответы с готовыми решениями:

Как получить private переменную класса, функцей членом другого класса
Игра змейка: Есть класс поле в котором содержится размеры поля: class field { private: int FIELD_START; int...

Приём константных векторов класса, как аргументов в методе другого класса
Есть такой класс: class Order { private: int numberOrder; map &lt;string, int&gt; catalogDish; double totalCost; public: ...

Как переместить из стека одного класса в массив другого класса?
// HW_on.24.11_classStack_SantaClaus.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; ...

25
75 / 26 / 22
Регистрация: 22.06.2013
Сообщений: 127
16.10.2015, 18:17  [ТС]
Студворк — интернет-сервис помощи студентам
Строка не компилируется
C++
1
2
3
4
for(auto& obj: objs_) 
{
       obj->onSizeChanged(nRows, nCols);
}
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
16.10.2015, 18:27
Цитата Сообщение от plapteshk Посмотреть сообщение
Строка не компилируется
Нужна поддержка c++11
0
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
16.10.2015, 21:08
Цитата Сообщение от plapteshk Посмотреть сообщение
Пользователь My может напрямую работать с Matrix, но мне нужно, чтобы всякий раз, когда в Matrix изменяется количество строк или столбцов автоматически вызывалась функция
Скорее всего либо матрицу надо прятать, либо My не нужно на изменение реагировать не мгновенно, а при вызове каких то своих методов оперирующих с матрицей. Иначе получается нарушение инкапсуляции.
Советую еще раз пересмотреть структуру иерархии, прежде чем начинать пляски с бубном по оповещению контейнера об изменении содержимого.

Добавлено через 6 минут
Делается оповещение двумя способами в зависимости от того что надо. Способ первый (простой но ограниченный), в TMatrix дается указатель на TMy который его содержит, TMatrix из своих сеттеров вызывает соответствующие методы TMy. Способ ограничен, поскольку в таком случае контейнером для TMatrix может быть только TMy или его потомки.
Способ второй - немного более сложный но неограниченный - в TMy заводятся события которые вызываются при их наличии из сеттеров. TMy в конструкторе устанавливает свои методы в качестве событий для вложенного Matrix
0
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
16.10.2015, 22:37
Цитата Сообщение от plapteshk Посмотреть сообщение
Строка не компилируется
C++
1
for(size_t i=0; i<objs_.size() //...
Но тебе это не нужно. В твоём случае My потерял единоличное владение над Matrix. Отсюда и проблемы. Либо помести объявление Matrix в private: и реализуй минимум методов взаимодействия с ним (с учётом const, inline и прочего). Либо вместо Matrix что-то другое должно быть в My. Но тут надо более точно понимать задачу.
1
75 / 26 / 22
Регистрация: 22.06.2013
Сообщений: 127
17.10.2015, 10:01  [ТС]
Цитата Сообщение от AlexVRud Посмотреть сообщение
Но тут надо более точно понимать задачу.
Вообщем есть отдельный класс TMatrix, который про My ничего не знает, внутри него не должно быть никаких friend class My и указателей на My.

И есть класс My, в котором есть матрица в разделе public. Предполагается что пользователю удобно работать с матрицей напрямую, а не через методы класса My.

Допустим вот такой вариант, нужно объявить Matrix как __property с методом чтения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class My
{
private:
    TMatrix FMatrix;
    size_t StoreRow, StoreCol;
protected:
TMatrix& GetMatrix(void)
{
     //Тут будет проверка на изменение строк и столбцов
     if ()
     return FMatrix;      
}
void SetMatrix(TMatrix& rhs) { FMatrix=rhs; } 
public:
__property TMatrix Matrix = {read=GetMatrix, write=SetMatrix};
}
Добавлено через 4 минуты
А нет, сначала написал, потом понял что не канает такой способ.

Добавлено через 2 минуты
Лан, всё равно AlexVRud хороший способ предложил.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
17.10.2015, 13:24
plapteshk
Джордж! Платите шесть пенсов и не морочьте друзьям голову! (с)
Аспектно-ориентированное программирование
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.10.2015, 13:24

Массив объектов одного класса как поле другого класса
Доброе время суток. Мне тут в универе задали лабу, нужно создать класс полем которого будет массив объектов класса из предыдущей лабы и в...

Как сделать, чтобы функция класса могла работать с обьектами другого класса
есть класс к примеру class One и класс к примеру class Two нужно чтобы элемент функция класса One могла работать в обьектами класа...

Наследование: Как мне определить любой из методов заданного класса внутри другого класса?
Добрый день, подскажите пожалуйста, что я делаю не так Есть файл Container.h в котором храню прототипы методов class Container ...

Массив объектов класса как член другого класса
Здравствуйте. У меня тут возникла проблемка #include &quot;main.h&quot; class player { public: player(); player(char*); ...

Инициализация экземпляра класса, как поле другого класса
Всем доброго времени суток ! Есть класс: class a{ public: a(int _type): type(_type) {} private: int type; }


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru