0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
1

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

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

Author24 — интернет-сервис помощи студентам
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2013, 16:24
Ответы с готовыми решениями:

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

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

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

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

22
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 16:08 2
Цитата Сообщение от Головастик Посмотреть сообщение
Write программу
Вы не до конца определились на каком языке общаться?
Производный класс должен быть построен на базе приведенного в коде?
0
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 16:23  [ТС] 3
Цитата Сообщение от Tulosba Посмотреть сообщение
Вы не до конца определились на каком языке общаться?
Производный класс должен быть построен на базе приведенного в коде?
да, конечно! На С++ )))
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 16:35 4
Если хотите использовать в качестве базового класса свой vector, то нужно для начала дать доступ к координатам. Либо написать функции доступа, типа getX1(), getY1() ... или сделать данные (x1, y1 ...) protected (вместо private).
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 16:38  [ТС] 5
Цитата Сообщение от 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 6
Дальше например так:

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  [ТС] 7
Цитата Сообщение от 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 8
Наверное все же несколько иначе:
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  [ТС] 9
Цитата Сообщение от 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 10
Цитата Сообщение от Головастик Посмотреть сообщение
Выдает ошибку: 61 'class vector' has no member named 'multi'
В какой строке? По приведенному коду я не вижу использования multi().
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 17:20  [ТС] 11
Цитата Сообщение от 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 12
Цитата Сообщение от Головастик Посмотреть сообщение
чтобы использовать функцию multi необходимо объявить переменную типа action?
Изначально ведь задача ставилась для производного класса. Т.е. новый класс, построенный на базе vector.
Если производный класс всё же не нужен, то можно просто расширить имеющийся. Убрать action и перенести multy внутрь vector.
0
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 17:40  [ТС] 13
Цитата Сообщение от 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 14
Вот готовый код, если что не понятно, спрашивайте.
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  [ТС] 15
Цитата Сообщение от 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 16
Цитата Сообщение от Головастик Посмотреть сообщение
А можно еще один дополнительный вопрос?
Категорически да
1
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 18:20  [ТС] 17
Цитата Сообщение от Tulosba Посмотреть сообщение
Категорически да
мне вот надо, чтобы программа содержалась в двух файлах: в первом - описание классов, во втором - реализация (работа с объектами). Так звучит задание. Я так понимаю, необходимо, будет подключать файл в include. Но нельзя же просто так взять и разделить код, подскажите ньюансы эти всякие...
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 18:35 18
Цитата Сообщение от Головастик Посмотреть сообщение
в первом - описание классов, во втором - реализация
Описание 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  [ТС] 19
Цитата Сообщение от 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 20
Цитата Сообщение от Головастик Посмотреть сообщение
вылетают ошибки:
Цитата Сообщение от Головастик Посмотреть сообщение
[Warning]
Ошибок не вижу, вижу предупреждение. Добавьте пустую строчку в vector.hpp
1
04.03.2013, 18:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2013, 18:53
Помогаю со студенческими работами здесь

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru