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

Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов

03.03.2013, 16:24. Показов 4848. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Write программу с использованием класса Вектор (не без помощи форумчанина), но необходимо создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов. НО я не знаю, как они вообще создаются! Подскажите!

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
44
45
46
47
48
49
#include<iostream>
#include<math.h>
using namespace std;
 
class vector
{
    private:
          int x1,
              y1,
              x2,
              y2;
    public:
        vector()
        {
            x1 = x2 = y1 = y2 = 0;
        }
 
        vector(int _x1, int _x2, int _y1, int _y2)
        {
            x1 = _x1;
            x2 = _x2;
            y1 = _y1;
            y2 = _y2;
        }
 
        double length()
        {
            double Kor = ((x2-x1)+(x2-x1)+(y2-y1)+(y2-y1));
            return sqrt(Kor);
        }
 
        void show()
        {
            cout << "begin: x1 = " << x1 <<
                 "  y1 = " << y1 <<
                 "\nend:   x2 = " << x2 <<
                 "  y2 = " << y2 << "\n\n";
        }
          
};
  
 
int main()
{
    vector a(1,1,3,4);
    cout <<"Length: "<< a.length() << endl;
    a.show();
    system("PAUSE");
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2013, 16:24
Ответы с готовыми решениями:

Рекурсия: функция умножения двух чисел, используя только операцию сложения
Напишите функцию умножения двух чисел, используя только операцию сложения(через рекурсию)

Перегрузка операторов сложения, вычитания и умножения двух векторов
Помогите пожалуйста. Мне надо сделать перегрузку сложения двух векторов, вычитания дух векторов, умножение двух векторов. И перегрузку...

Реализовать класс векторов, переопределив операции сложения, вычитания, умножения
Реализовать класс векторов, переопределив операции сложения, вычитания, умножения векторов и операторы равенства/неравенства. Учесть...

22
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 16:08
Цитата Сообщение от Головастик Посмотреть сообщение
Write программу
Вы не до конца определились на каком языке общаться?
Производный класс должен быть построен на базе приведенного в коде?
0
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 16:23  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Вы не до конца определились на каком языке общаться?
Производный класс должен быть построен на базе приведенного в коде?
да, конечно! На С++ )))
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 16:35
Если хотите использовать в качестве базового класса свой vector, то нужно для начала дать доступ к координатам. Либо написать функции доступа, типа getX1(), getY1() ... или сделать данные (x1, y1 ...) protected (вместо private).
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 16:38  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Если хотите использовать в качестве базового класса свой vector, то нужно для начала дать доступ к координатам. Либо написать функции доступа, типа getX1(), getY1() ... или сделать данные (x1, y1 ...) protected (вместо private).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<math.h>
using namespace std;
 
class vector
{ 
    protected:
          int x1,
              y1,
              x2,
              y2;
    public:
        vector()
        {
            x1 = x2 = y1 = y2 = 0;
        }
..............
А дальше?..
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 16:42
Дальше например так:

C++
1
2
3
4
5
6
7
8
9
10
class SuperVector : public vector
{
    public:
   void Multiply( int mult )
   {
      x1 *= mult; 
      x2 *= mult; 
      ...
   }
}
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 16:50  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Дальше например так:

C++
1
2
3
4
5
6
7
8
9
10
class SuperVector : public vector
{
    public:
   void Multiply( int mult )
   {
      x1 *= mult; 
      x2 *= mult; 
      ...
   }
}
угу, хорошо. А если сделать перегрузку "сложение векторов" здесь же. То это так:
C++
1
2
 vector operator + (vector a, vector b)
              {return new vector(a.x1 + b.x1, a.y1 + b.y1, a.x2 + b.x2, a.y2 + b.y2);}
ну за правильность операции сложения точно не ручаюсь, но мне сам факт перегрузки функции важен.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 17:04
Наверное все же несколько иначе:
C++
1
2
 vector operator + (const vector& b) const
{ return vector(this->x1 + b.x1, this->y1 + b.y1, this->x2 + b.x2, this->y2 + b.y2);}
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 17:12  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Наверное все же несколько иначе:
C++
1
2
 vector operator + (const vector& b) const
{ return vector(this->x1 + b.x1, this->y1 + b.y1, this->x2 + b.x2, this->y2 + b.y2);}
При такой раскладке:
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
44
45
46
47
48
49
50
51
52
53
#include<iostream>
#include<math.h>
using namespace std;
 
class vector
{ 
    protected:
          int x1,
              y1,
              x2,
              y2;
    public:
        vector()
        {
            x1 = x2 = y1 = y2 = 0;
        }
 
        vector(int _x1, int _y1, int _x2, int _y2)
        {
            x1 = _x1;
            x2 = _x2;
            y1 = _y1;
            y2 = _y2;
        }
 
        double length()
        {
            double Kor = ((x2-x1)+(x2-x1)+(y2-y1)+(y2-y1));
            return sqrt(Kor);
        }
 
        void show()
        {
            cout << "begin: x1 = " << x1 <<
                 "  y1 = " << y1 <<
                 "\nend:   x2 = " << x2 <<
                 "  y2 = " << y2 << "\n\n";
        }
        vector operator + (const vector& b) const
        { return vector(this->x1 + b.x1, this->y1 + b.y1, this->x2 + b.x2, this->y2 + b.y2);} 
         
};
 
class action : public vector
{
    public:
   void multi( int mult )
   {
      x1*= mult; 
      y1*= mult; 
      
   }
};
Выдает ошибку: 61 'class vector' has no member named 'multi'
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 17:16
Цитата Сообщение от Головастик Посмотреть сообщение
Выдает ошибку: 61 'class vector' has no member named 'multi'
В какой строке? По приведенному коду я не вижу использования multi().
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 17:20  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
В какой строке? По приведенному коду я не вижу использования multi().
Прости, я сама на строку блин сразу не посмотрела, в коде основной программы написала:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    vector a(1,1,3,4);
    vector b(1,1,1,2);
    vector c=a+b;
    cout <<"Length a: "<< a.length() << endl;
    cout <<"Length b: "<< a.length() << endl;
    a.multi(2);
    a.show();
    
    system("PAUSE");
}
Получается, чтобы использовать функцию multi необходимо объявить переменную типа action? тогда как умножить имеющийся вектор a, допустим, на число? как использовать эту функцию можно будет?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 17:28
Цитата Сообщение от Головастик Посмотреть сообщение
чтобы использовать функцию multi необходимо объявить переменную типа action?
Изначально ведь задача ставилась для производного класса. Т.е. новый класс, построенный на базе vector.
Если производный класс всё же не нужен, то можно просто расширить имеющийся. Убрать action и перенести multy внутрь vector.
0
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 17:40  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Изначально ведь задача ставилась для производного класса. Т.е. новый класс, построенный на базе vector.
Если производный класс всё же не нужен, то можно просто расширить имеющийся. Убрать action и перенести multy внутрь vector.
нет, производный класс нужен, просто перегруженная функция сложения в рамках action выдала у меня кучу ошибок, например:
11 `int vector::y2' is protected
52 within this context
......

Поэтому я ее и кинула в vector, чтобы проверить работоспособность функции.. А multi обязательно надо в action. Напишите плиз, как ей пользоваться в теле основной проги??
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 17:58
Вот готовый код, если что не понятно, спрашивайте.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include<iostream>
#include<math.h>
using namespace std;
 
class vector
{ 
    protected:
          int x1,
              y1,
              x2,
              y2;
    public:
        vector()
        {
            x1 = x2 = y1 = y2 = 0;
        }
 
        vector(int _x1, int _y1, int _x2, int _y2)
        {
            x1 = _x1;
            x2 = _x2;
            y1 = _y1;
            y2 = _y2;
        }
 
        double length()
        {
            double Kor = ((x2-x1)+(x2-x1)+(y2-y1)+(y2-y1));
            return sqrt(Kor);
        }
 
        void show()
        {
            cout << "begin: x1 = " << x1 <<
                 "  y1 = " << y1 <<
                 "\nend:   x2 = " << x2 <<
                 "  y2 = " << y2 << "\n\n";
        }
};
 
class action : public vector
{
public:
    action(int x1, int y1, int x2, int y2) :
      vector( x1, y1, x2, y2 ) {}
 
    void multi( int mult )
    {
      x1 *= mult; 
      y1 *= mult; 
      x2 *= mult; 
      y2 *= mult; 
    }
 
    action operator + (const action& b) const
    { 
        return action(this->x1 + b.x1, this->y1 + b.y1, this->x2 + b.x2, this->y2 + b.y2);
    } 
};
 
 
int main()
{
    action a(1,1,3,4);
    action b(1,1,1,2);
    action c=a+b;
    cout <<"Length a: "<< a.length() << endl;
    cout <<"Length b: "<< a.length() << endl;
    a.multi(2);
    a.show();
    
    system("PAUSE");
}
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 18:03  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Вот готовый код, если что не понятно, спрашивайте.
C++
1
2
3
4
5
#include<iostream>
#include<math.h>
using namespace std;
 ........
}
упс! Всё крайне понятно. Просто объявляешь векторы как класс action и пользуешься всеми функциями. Спасибооо)) А можно еще один дополнительный вопрос? если нет - я не обижусь!
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 18:14
Цитата Сообщение от Головастик Посмотреть сообщение
А можно еще один дополнительный вопрос?
Категорически да
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 18:20  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Категорически да
мне вот надо, чтобы программа содержалась в двух файлах: в первом - описание классов, во втором - реализация (работа с объектами). Так звучит задание. Я так понимаю, необходимо, будет подключать файл в include. Но нельзя же просто так взять и разделить код, подскажите ньюансы эти всякие...
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 18:35
Цитата Сообщение от Головастик Посмотреть сообщение
в первом - описание классов, во втором - реализация
Описание vector.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
 
class vector
{ 
    protected:
          int x1, y1, x2, y2;
    public:
        vector();
        vector(int _x1, int _y1, int _x2, int _y2);
        double length();
        void show();
};
 
class action : public vector
{
public:
    action(int x1, int y1, int x2, int y2);
    void multi( int mult );
    action operator + (const action& b) const;
};

Реализация vector.cpp
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
44
45
46
#include<iostream>
#include<math.h>
#include "vector.hpp"
 
vector::vector()
{
   x1 = x2 = y1 = y2 = 0;
}
 
vector::vector(int _x1, int _y1, int _x2, int _y2)
{
   x1 = _x1;
   x2 = _x2;
   y1 = _y1;
   y2 = _y2;
}
 
double vector::length()
{
   double Kor = ((x2-x1)+(x2-x1)+(y2-y1)+(y2-y1));
   return sqrt(Kor);
}
 
void vector::show()
{
   std::cout << "begin: x1 = " << x1 <<
                 "  y1 = " << y1 <<
                 "\nend:   x2 = " << x2 <<
                 "  y2 = " << y2 << "\n\n";
}
 
action::action(int x1, int y1, int x2, int y2) :
      vector( x1, y1, x2, y2 ) {}
 
void action::multi( int mult )
{
      x1 *= mult; 
      y1 *= mult; 
      x2 *= mult; 
      y2 *= mult; 
}
 
action action::operator + (const action& b) const
{ 
   return action(this->x1 + b.x1, this->y1 + b.y1, this->x2 + b.x2, this->y2 + b.y2);
}
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 18:49  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Описание vector.hpp ..........
А в основной проге подключать файл vector.сpp ? хотя тогда при таком раскладе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<math.h>
#include "vector.hpp"
using namespace std;
int main()
{
    action a(1,1,3,4);
    action b(1,1,1,2);
    action c=a+b;
    cout <<"Length a: "<< a.length() << endl;
    cout <<"Length b: "<< a.length() << endl;
    a.show();
    a.multi(2);
    a.show();
    system("PAUSE");
}
вылетают ошибки:
3 In file included C:\Users\User\....\vector.cpp from C:\Users\User\....main.cpp
22:3 C:\Users\......\vector.hpp [Warning] no newline at end of file

P.S. main - это файл с главной функцией int main () , которая пытается использовать функции класса action
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 18:53
Цитата Сообщение от Головастик Посмотреть сообщение
вылетают ошибки:
Цитата Сообщение от Головастик Посмотреть сообщение
[Warning]
Ошибок не вижу, вижу предупреждение. Добавьте пустую строчку в vector.hpp
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.03.2013, 18:53
Помогаю со студенческими работами здесь

Создать класс векторов, реализующий сложения и вычитания векторов
Помогите найти ошибку, так как неправильно выводятся массивы, то скорее всего не получается сформировать массив. А задание:создать класс...

Функция сложения и умножения
Друзья, подскажите как сюда добавить умножение с помощью ещё одного условия if? def f(word): if '+' in word: place =...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru