Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Головастик
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 40
#1

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

03.03.2013, 16:24. Просмотров 2021. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 16:24
Ответы с готовыми решениями:

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

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

Создать класс Matrix и функции умножения и сложения матриц
Создайте класс Matrix на базе вектора vector&lt;vector&lt;int&gt;&gt;. Определите...

Создать класс матриц с целочисленными элементами и определить операции умножения и сложения
Всем привет, помогите с задачей, заранее спасибо. Создать класс матриц с...

Есть базовый и производный класс, в базовом определена функция, необходимо её объявить в производном!
Как-то так, что ли: class x { public: void f_0 (){}; }; class...

22
Tulosba
:)
Эксперт С++
4747 / 3241 / 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
Tulosba
:)
Эксперт С++
4747 / 3241 / 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
Tulosba
:)
Эксперт С++
4747 / 3241 / 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
Tulosba
:)
Эксперт С++
4747 / 3241 / 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
Tulosba
:)
Эксперт С++
4747 / 3241 / 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
Tulosba
:)
Эксперт С++
4747 / 3241 / 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
Tulosba
:)
Эксперт С++
4747 / 3241 / 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
Tulosba
:)
Эксперт С++
4747 / 3241 / 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
Tulosba
:)
Эксперт С++
4747 / 3241 / 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
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
04.03.2013, 18:53 #20
Цитата Сообщение от Головастик Посмотреть сообщение
вылетают ошибки:
Цитата Сообщение от Головастик Посмотреть сообщение
[Warning]
Ошибок не вижу, вижу предупреждение. Добавьте пустую строчку в vector.hpp
1
04.03.2013, 18:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2013, 18:53

Функция сложения двух чисел
здравствуйте все, сидящие на форуме в столь поздний час. Не могли бы вы мне...

Функция умножения двух массивов
Даны два массива символов a и b (состоят из цифр), репрезентирующие два целых...

Функция для сложения факториалов двух чисел
Даны числа N&lt;M. Вычислить N! + !M. Сложность для меня заключается в чем? в...


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

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

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