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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Головастик
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
03.03.2013, 16:24     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов #1
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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 16:24     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов
Посмотрите здесь:

Есть базовый и производный класс, в базовом определена функция, необходимо её объявить в производном! C++
функция сложения двух чисел C++
C++ Создать класс матриц с целочисленными элементами и определить операции умножения и сложения
C++ Функция сложения двух чисел
C++ Создать класс Man (человек), с полями: имя, возраст, пол и вес. Создать производный класс Student ...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.03.2013, 16:08     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов #2
Цитата Сообщение от Головастик Посмотреть сообщение
Write программу
Вы не до конца определились на каком языке общаться?
Производный класс должен быть построен на базе приведенного в коде?
Головастик
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 16:23  [ТС]     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов #3
Цитата Сообщение от Tulosba Посмотреть сообщение
Вы не до конца определились на каком языке общаться?
Производный класс должен быть построен на базе приведенного в коде?
да, конечно! На С++ )))
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.03.2013, 16:35     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов #4
Если хотите использовать в качестве базового класса свой vector, то нужно для начала дать доступ к координатам. Либо написать функции доступа, типа getX1(), getY1() ... или сделать данные (x1, y1 ...) protected (вместо private).
Головастик
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;
        }
..............
А дальше?..
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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; 
      ...
   }
}
Головастик
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);}
ну за правильность операции сложения точно не ручаюсь, но мне сам факт перегрузки функции важен.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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);}
Головастик
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'
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.03.2013, 17:16     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов #10
Цитата Сообщение от Головастик Посмотреть сообщение
Выдает ошибку: 61 'class vector' has no member named 'multi'
В какой строке? По приведенному коду я не вижу использования multi().
Головастик
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, допустим, на число? как использовать эту функцию можно будет?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.03.2013, 17:28     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов #12
Цитата Сообщение от Головастик Посмотреть сообщение
чтобы использовать функцию multi необходимо объявить переменную типа action?
Изначально ведь задача ставилась для производного класса. Т.е. новый класс, построенный на базе vector.
Если производный класс всё же не нужен, то можно просто расширить имеющийся. Убрать action и перенести multy внутрь vector.
Головастик
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. Напишите плиз, как ей пользоваться в теле основной проги??
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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");
}
Головастик
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 и пользуешься всеми функциями. Спасибооо)) А можно еще один дополнительный вопрос? если нет - я не обижусь!
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.03.2013, 18:14     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов #16
Цитата Сообщение от Головастик Посмотреть сообщение
А можно еще один дополнительный вопрос?
Категорически да
Головастик
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
04.03.2013, 18:20  [ТС]     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов #17
Цитата Сообщение от Tulosba Посмотреть сообщение
Категорически да
мне вот надо, чтобы программа содержалась в двух файлах: в первом - описание классов, во втором - реализация (работа с объектами). Так звучит задание. Я так понимаю, необходимо, будет подключать файл в include. Но нельзя же просто так взять и разделить код, подскажите ньюансы эти всякие...
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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);
}
Головастик
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2013, 18:53     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов
Еще ссылки по теме:

C++ Создать класс для обработки векторов разность векторов норму векторов
C++ Функция умножения двух массивов
C++ Класс с полем - динамический массив. Функция сложения массивов

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
04.03.2013, 18:53     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов #20
Цитата Сообщение от Головастик Посмотреть сообщение
вылетают ошибки:
Цитата Сообщение от Головастик Посмотреть сообщение
[Warning]
Ошибок не вижу, вижу предупреждение. Добавьте пустую строчку в vector.hpp
Yandex
Объявления
04.03.2013, 18:53     Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов
Ответ Создать тему
Опции темы

Текущее время: 18:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru