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

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

18.05.2009, 12:45. Показов 7768. Ответов 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
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
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. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru