Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 5.00
Cowboyka90
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 9
#1

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

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

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

З.Ы. Класс Вектор описан в приложении.
0
Вложения
Тип файла: txt Текстовый документ.txt (5.4 Кб, 74 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2009, 12:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование класса Вектор (C++):

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

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

Наследование абстрактного класса - C++
Не могли бы вы мне объяснить данный код: Actions *NewAct = new Array(); // строка 1 ((Array *)NewAct)->Set_arr(count); // строка 2 ...

Объекты класса. Наследование - C++
Помогите написать программу которая подсчитывает объекты класса используя наследование.

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Шерсть-На-Носу
40 / 40 / 1
Регистрация: 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
Cowboyka90
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 9
20.05.2009, 21:02  [ТС] #3
Что-то не работает твой код в слиянии с моим. подгрузил все что надо.
0
Somebody
2789 / 1603 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
20.05.2009, 21:18 #4
Так можно, наверное, перегрузить operator[] - нормализовать всё в нём. Пусть он будет валяться всё время ненормализованный, а перед доступом к нему нормализовываться.
0
Cowboyka90
0 / 0 / 0
Регистрация: 27.04.2009
Сообщений: 9
21.05.2009, 12:18  [ТС] #5
тут проблема в чем. программа работает. в коде после каждой операции типо сложения и вычитания должна идти нормализация. а ее нет =(((
0
Шерсть-На-Носу
40 / 40 / 1
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2009, 14:13
Привет! Вот еще темы с ответами:

Наследование, конструктор класса - C++
Объясните мне пожалуйста, что значит такая конструкция: class CMyPaintDC:public CPaintDC { public: CMyPaintDC(CWnd* pWnd =...

Наследование класса String - C++
Начал осваивать ООП С++ и решил в виде практики добавить в класс #include &lt;string&gt; добавить свою функцию переворачивания строки, точнее...

Наследование класса. Массивы и их суммирование - C++
Мне нужно создать класc Set в котором реализовать 2 метода setSet и getSet на первый подается массив, а второй его выводит, так же сделать...

Наследование(Преобразование из класса Fraction) - C++
Здесь FloatFraction(const Fraction&amp; src){ set(src.get_num(),src.get_den()); } возникает ошибка: error C2535:...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.05.2009, 14:13
Ответ Создать тему
Опции темы

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