С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/41: Рейтинг темы: голосов - 41, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 9

Наследование класса Вектор

18.05.2009, 12:45. Показов 7765. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите написать прогу плииззз....
Разработать класс NormVector – вектор единичной длины, наследованный от класса Vector. Замечание: нормирование необходимо производить после любого изменения составляющих вектора. Соответственно необходимо перегрузить метод доступа к компонентам вектора.

З.Ы. Класс Вектор описан в приложении.
Вложения
Тип файла: txt Текстовый документ.txt (5.4 Кб, 90 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.05.2009, 12:45
Ответы с готовыми решениями:

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

Наследование. Вектор на плоскости
В производном классе создайте несколько конструкторов, деструкторов. Не забывайте, что в конструкторе производного класса необходимо...

Наследование / Вектор или массив?
Добрый вечер! В программе нужно создать базовый класс и его классы-наследники. Базовый класс - Игра, в котором указано, что будет...

5
 Аватар для Шерсть-На-Носу
48 / 48 / 8
Регистрация: 30.01.2009
Сообщений: 168
18.05.2009, 22:06
Все остальное, кроме оператора [] делается очень просто - добавляется функция нормализации, которая вызывается после каждой операции. А вот с оператором [] что делать - непонятно... Он ведь возвращает ссылку на область памяти и ее изменение происходит после того, как оператор заканчивает работу.
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
40
41
42
43
class NormVector : public Vector
{
private:
    void Normalize(void)
    {
        double len=modul();
        for (int i = 0; i < GetSize(); i++) (*this)[i]/=len;
    }
 
public:
    NormVector() : Vector() {};
    NormVector(int n) : Vector(n) {Normalize();}
    NormVector(Vector& vector) : Vector(vector) {Normalize();}
 
    virtual ~NormVector() {}
 
    //int  GetSize(); // Не нужно переопределять, не меняет содержимое вектора
    //int  SetSize(int n); // Не нужно переопределять, не меняет содержимое вектора
                                               
    NormVector operator=(Vector& vector)
    {
        this->Vector::operator=(vector);
        Normalize();
        return *this;
    }
 
    //double &operator[](int n); //??????????????????????????????????
 
    NormVector operator+(const Vector& vector2)
    {
        NormVector vector=this->Vector::operator+(vector2);
        vector.Normalize();
        return vector;
    }
    NormVector operator-(const Vector& vector2)
    {
        NormVector vector=this->Vector::operator-(vector2);
        vector.Normalize();
        return vector;
    }
    // double  operator*(const Vector& vector2); // Не нужно переопределять, не меняет содержимое вектора
    // double  modul(); // Не нужно переопределять, не меняет содержимое вектора
};
0
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 9
20.05.2009, 21:02  [ТС]
Что-то не работает твой код в слиянии с моим. подгрузил все что надо.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
20.05.2009, 21:18
Так можно, наверное, перегрузить operator[] - нормализовать всё в нём. Пусть он будет валяться всё время ненормализованный, а перед доступом к нему нормализовываться.
0
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 9
21.05.2009, 12:18  [ТС]
тут проблема в чем. программа работает. в коде после каждой операции типо сложения и вычитания должна идти нормализация. а ее нет =(((
0
 Аватар для Шерсть-На-Носу
48 / 48 / 8
Регистрация: 30.01.2009
Сообщений: 168
21.05.2009, 14:13
У меня работает:
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
int main()
{ 
    NormVector v1(3), v2, v3(2), v4;
    int i = 0;
    double r;
 
    v2.SetSize(3);
    for (i = 0; i < v1.GetSize(); i++)
       { v1[i] = i + 1; v2[i] = i + 5; }
 
    printf("1-u^ vektor: ");
    PrintVector(v1);
 
    printf("2-u^ vektor: ");
    PrintVector(v2);
 
    v3 = v1 + v2;
    printf("Suuma vektorov: ");
    PrintVector(v3);
 
    v4 = v1 - v2;
    printf("raznost (vektor1-vektor2): ");
    PrintVector(v4);
 
    r = v1 * v2;
    printf(" Modul vectora 2: %9.3lf\n\n", v2.modul());
    printf(" Skalyarnoe proizvedenie vectorov: %9.3lf\n", r);
 
    return 0;
}
дает результат:

Code
1
2
3
4
5
6
7
8
9
10
11
1-u^ vektor:     1.000    2.000    3.000
 
2-u^ vektor:     5.000    6.000    7.000
 
Suuma vektorov:     0.424    0.566    0.707
 
raznost (vektor1-vektor2):    -0.577   -0.577   -0.577
 
 Modul vectora 2:    10.488
 
 Skalyarnoe proizvedenie vectorov:    38.000
Проблема только в операторе [].

Добавлено через 5 минут 43 секунды
Что касается последнего - не знаю, что тут можно сделать. Разве что функцию Normalize() сделать открытой и после присваивания значений элементам вектора вызывать ее явным образом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.05.2009, 14:13
Помогаю со студенческими работами здесь

Вектор пользовательского типа данных + наследование
Доброго времени суток. Дело в чём: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class A { ...

Наследование и полиморфизм (класс вектор и матрица)
Есть такая операция для вектора: Vector mathobj::operator+(const Vector &amp;v1, const Vector &amp;v2) { Vector tempSum(v1.size); ...

Составить описание класса "3D вектор". Объявить объекты класса и продемонстрировать работу методов
Возникли сложности при решении задачи. Буду признателен тем, кто поможет. Задание: Составить описание класса. Объявить объекты класса...

Наследование от виртуального класса
Хукаю DirectX с помощью Detours. Делаю обёртку. Пишу много обезьяньего кода. Получаю такой месседж: С winAPI знаком поверхностно....

Наследование класса Exception
Доброе время суток, уважаемые профи, и знатоки! У меня появилась очень серьезная проблема, суть которой заключается в наследовании класа...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru