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

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

Войти
Регистрация
Восстановить пароль
 
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
#1

Подскажите с организацией класса - C++

26.02.2014, 11:29. Просмотров 323. Ответов 6
Метки нет (Все метки)

Суть проблемы - необходимо разработать структуру данных обладающую следующими свойствами:
1) Класс model содержит массив элементов point.
2) Класс point имеет поля - трехмерный тензор(аля вектор), ПЕРЕМЕННОЕ количество объектов наследников класса typeproblem. Причем эти объекты также содержат данные являющиеся тензорами произвольного ранга и методы работы с ними. Хотелось бы реализовать эти методы виртуальными, что бы был единый интерфейс в обращении с этими объектами. Второй день ломаю голову как это можно реализовать. Собственно у меня нет опыта работы с ООП поэтому хотелось бы услышать ваше мнение по этому вопросу.
Понимаю, что объяснил не совсем доходчиво поэтому постарась перефразировать задачу на уровне тех задания:
Необходимо реализовать структуру для расчета физических величин в пространственной задаче. Физические величины могут быть скалярами(температура), векторами(скорость течения), тензорами второго ранга. В структуре point будет храниться координаты точки и значение вычисляемой физической величины. Класс model содержит массив точек и вызывает методы для расчета физических величин. Желательно в структоре point должна быть возможность узнать ее соседние точки.
Замечу, что число задач может быть произвольным. Т.е. мы можем запустить вычисления только для скоростей, либо для сокростей и температур и т.д. Это можно реализовать как массив указателей на объекты наследники typeproblem. Таким образом объект класса model может поочередно обращаться к элементам этого массива и вызывать для них вычисление. Вот поэтому хотелось бы сделать методы класса typeproblem виртуальными.
Кроме того следует предусмотреть возможность добавления в существующий код других типов вычислений.
Вот такая непростая задача. Буду очень благодарен за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2014, 11:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите с организацией класса (C++):

Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать? - C++
Скажу сразу, а то сейчас начнется, что я прекрасно понимаю, что поля класса при объявлении инициализировать нельзя. Можно конструктором при...

Трудности с организацией классовой иерархии - C++
Класс A использует данные класса B для выполнения своих методов, которые вызывает класс B. Что не хватает этому коду для того чтобы он...

Подскажите пример контейнерного класса-массив и список - C++
Помогите пожалуйста. Стандарные библиотеки типа list, CObject, AtlArray не надо - так очень долго разбираться. Мне надо самое примитивное....

Подскажите как мне из класса вернуть ссылку на класс - C++
Вот допустим у меня есть класс void OnPlayerShooted(int playerid); class PLAYER { public: int shoot() { ...

Подскажите пожалуйста, Почему применяется & к имени класса ? - C++
Подскажите пожалуйста, Почему применяется & к имени класса. не могу понять для чего и как оно работает в int &atype::operator(int i) ...

Подскажите, как правильно обращаться к фунциям-членам другого класса - C++
Подскажите как правильно обращаться к фунциям-членам другого класса. 1-й класс (m_list - член класса, которую необходимо вызвать с...

6
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 11:50 #2
Цитата Сообщение от Ilot Посмотреть сообщение
ПЕРЕМЕННОЕ количество объектов наследников класса typeproblem.
вектор (умных) указателей на базовый тип.
1
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
26.02.2014, 12:12  [ТС] #3
Tulosba, спасибо. Однако с реализацией переменного числа типов расчета проблем особливых нет. Проблема с реализацией класса typeproblem.
Хех похоже я туплю. Поля наследников typeproblem можно не передавать в функцию вычислений через список параметров они же и так доступны. Поэтому реализовать единый интерфейс вообще не проблема. Достаточно передать только текущие координаты, а они общие для всех типов вычислений.
Теперь осталось реализовать грамотный вызов соседних точек. Думаю с этим я разбирусь.
Пора бросать пить
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 12:18 #4
Цитата Сообщение от Ilot Посмотреть сообщение
Однако с реализацией переменного числа типов расчета проблем особливых нет.
Я подумал, раз уж выделено КАПСОМ, то важно
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
26.02.2014, 12:26  [ТС] #5
Впринципе вы правильно поняли, но в шапке вопрос стоял не только об этом. Однако раз за это зашла речь я хотел бы поинтересоваться сложно ли реализовать возможность добавления типов вычислений в ввиде библиотек классов? Собственно я в этом пока не разбараюсь, однако пытаюсь разработать интерфейс классов таким образом, что бы была возможность добавлять новые типы вычислений не изменяя исходного кода приложения. Вот отсюда все эти заморочки с виртуальными функциями.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 13:00 #6
Цитата Сообщение от Ilot Посмотреть сообщение
реализовать возможность добавления типов вычислений в ввиде библиотек классов
Поподробнее объясните. Я не уловил сути.
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
26.02.2014, 13:24  [ТС] #7
Цитата Сообщение от Tulosba Посмотреть сообщение
Поподробнее объясните. Я не уловил сути.
Допустим имеем базовый класс который будет характеризовать типы вычислений:
Кликните здесь для просмотра всего текста
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
#ifndef TYPEPROBLEM_H_INCLUDED
#define TYPEPROBLEM_H_INCLUDED
#include"calculation_objects.h"
namespace lab
{
class typeproblem {
public:
    virtual bool Calculation(tensor_1) = 0;
};
 
/**
*   Движение среды
*/
class wrapping: public typeproblem
{
    tensor_1 speed;
 
    tensor_0 viscosity_first;
    tensor_0 viscosity_second;
public:
    bool Calculation(tensor_1);
}
/**
*   Температурное поле
*/
class heat: public typeproblem
{
    tensor_0 temperature;
    tensor_0 transcalency;
public:
    bool Calculation(tensor_1);
}
 
}
#endif // TYPEPROBLEM_H_INCLUDED

Классы wrapping и heat являются наследниками и предназначены для вычисления соответствующих величин. Теперь допустим мне необходимо написать программу для вычисления, к примеру, диффузии. Это должно быть реализованно в виде нового класса, наследника базового typeproblem, что бы я мог поместить указатель на объект этого класса в массив указателей для провдения дальнейших вычислений вызовом ф-и Calculation(tensor_1). Вопрос сложно ли реализовать так что бы приложение при запуске сканировало некую дерикторию в которой будут валяться библиотечные файлы с реализациями подобных классов с дальнейшей возможностью выбора в самом приложении доступных типов вычислений.
0
26.02.2014, 13:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 13:24
Привет! Вот еще темы с ответами:

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

Подскажите пожалуйста в чем может быть трабл при компиляции класса выдает ошибку - C++
Подскажите пожалуйста в чем может быть проблема: при компиляции класса выдает ошибку: (Ошибка LNK2001 неразрешенный внешний символ...

подскажите как заставить правильно работать программу по реализации класса "треугольник" на C++ - C++
lb_1_oop_sam.h #ifndef lb_1_oop_sam_h #define lb_1_oop_sam_h //Структура "треугольник" class triangle { struct point ...

внук родительского класса не может работать с полями дедовского класса; почему? - C++
Не всё так просто на самом деле. Непонятно, какую роль во всём этом играют шаблоны. Но к делу. Вот код: class base { public: base...


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

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

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