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

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

16.10.2015, 12:38. Показов 1861. Ответов 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 / 1575 / 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
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru