Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 9
1

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

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


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

З.Ы. Класс Вектор описан в приложении.
0
Вложения
Тип файла: txt Текстовый документ.txt (5.4 Кб, 85 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2009, 12:45
Ответы с готовыми решениями:

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

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

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

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

5
48 / 48 / 8
Регистрация: 30.01.2009
Сообщений: 168
18.05.2009, 22:06 2
Все остальное, кроме оператора [] делается очень просто - добавляется функция нормализации, которая вызывается после каждой операции. А вот с оператором [] что делать - непонятно... Он ведь возвращает ссылку на область памяти и ее изменение происходит после того, как оператор заканчивает работу.
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  [ТС] 3
Что-то не работает твой код в слиянии с моим. подгрузил все что надо.
0
2821 / 1630 / 252
Регистрация: 03.12.2007
Сообщений: 4,222
20.05.2009, 21:18 4
Так можно, наверное, перегрузить operator[] - нормализовать всё в нём. Пусть он будет валяться всё время ненормализованный, а перед доступом к нему нормализовываться.
0
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 9
21.05.2009, 12:18  [ТС] 5
тут проблема в чем. программа работает. в коде после каждой операции типо сложения и вычитания должна идти нормализация. а ее нет =(((
0
48 / 48 / 8
Регистрация: 30.01.2009
Сообщений: 168
21.05.2009, 14:13 6
У меня работает:
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;
}
дает результат:

Код
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2009, 14:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

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

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

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


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

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

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