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

Сложение векторов - C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.80
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
07.04.2010, 22:40     Сложение векторов #1
Здрасти.

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
#include <iostream>
#include <conio.h>
#include <cmath>
 
class vector3D{
    public:
    vector3D(int inita=0, int initb=0, int initc=0): a(inita), b(initb), c(initc){};
    int add(vector3D &v1, vector3D &v2);
 
    private:
    int a;
    int b;
    int c;
 
};
 
int vector3D::add(vector3D &v1, vector3D &v2){
    return v1.a+v2.a+v1.b+v2.b+v1.c+v2.c;
}
 
 
int main()
{
    vector3D v1(1,2,3);
    vector3D v2(4,3,2);
 
    
 
    return 0;
}
как мне сложить вектора v1 и v2 ?? Функция add чтото не получается у меня

Добавлено через 23 минуты
вот так работает

C++
1
2
3
4
5
6
7
8
9
int main()
{
    vector3D v1(1,2,3);
    vector3D v2(4,3,5);
 
    std::cout<<v1.add(v1,v2);
 
    return 0;
}
но помоему это както не корректно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Psixodelik
 Аватар для Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
07.04.2010, 22:48     Сложение векторов #2
А что не корректно? Мне вот только не нравится что у тебя получается одно число...вроде должен получится вектор, если я прав, то тебе надо изменить 18 строку...
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
07.04.2010, 22:52  [ТС]     Сложение векторов #3
18, да это точно.

все работает, но мне кажется некорректно так делать
C++
1
v1.add(v1,v2);
, или так и надо?

Добавлено через 38 секунд
v1 2 раза меня смущает просто
Psixodelik
 Аватар для Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
07.04.2010, 22:54     Сложение векторов #4
можешь сделать так:

C++
1
2
3
4
5
vector3D result;
vector3D v1(1,2,3);
vector3D v2(4,3,2);
    
std::cout << result.add(v1,v2)<< std::endl;
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
07.04.2010, 22:57     Сложение векторов #5
переменные a, b, c объявлены в разделе private
добавьте в объявление класса
friend int add(vector3D &v1, vector3D &v2);

соответственно из определения функции уберите vector3d::
иначе у Вас add() только как функция класса будет работать, что собственно и происходит.

а лучше оператор + перегрузить, и возвращать действительно нужно объект того же класса - так как-то правильнее...
insideone
Модератор
Автор FAQ
 Аватар для insideone
3630 / 908 / 48
Регистрация: 10.01.2010
Сообщений: 2,446
07.04.2010, 23:02     Сложение векторов #6
Лучше
C++
1
2
3
int vector3D::add(vector3D &v2){
    return a+v2.a+b+v2.b+c+v2.c;
}
C++
1
std::cout<< v1+v2;
Хотя вычисления мне не нравятся
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
07.04.2010, 23:12  [ТС]     Сложение векторов #7
easybudda, то что мне нужно, спасибо

Добавлено через 1 минуту
insideone, ненравятся потомучто выходит одно число? это я исправлю

Добавлено через 7 минут
Цитата Сообщение от easybudda Посмотреть сообщение
и возвращать действительно нужно объект того же класса - так как-то правильнее...
если возвратить объект тогоже класса тогда как функция add будет выглядить??
insideone
Модератор
Автор FAQ
 Аватар для insideone
3630 / 908 / 48
Регистрация: 10.01.2010
Сообщений: 2,446
07.04.2010, 23:14     Сложение векторов #8
Цитата Сообщение от PointsEqual Посмотреть сообщение
если возвратить объект тогоже класса тогда как функция add будет выглядить??
C++
1
2
3
vector3D vector3D::add(vector3D &v2){
    // какой то код
}
Возвращать именно по значению - важно

Не по теме:

Однако после этого не будет работать вывод через cout, но и из этого тоже есть выход

PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
07.04.2010, 23:27  [ТС]     Сложение векторов #9
По вашим рекомендациям вот что сделал:

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
class vector3D{
    public:
    vector3D(int inita=0, int initb=0, int initc=0): a(inita), b(initb), c(initc){};
    vector3D operator+(vector3D v2);
    void show();
 
    private:
    int a;
    int b;
    int c;
 
};
 
vector3D vector3D::operator+(vector3D v2){
    vector3D vec;
    vec.a=v2.a+a;
    vec.b=v2.b+b;
    vec.c=v2.c+c;
    return vec;
}
 
void vector3D::show(){
    std::cout<<a<<","<<b<<","<<c;
}
 
int main()
{
    vector3D v1(1,2,3);
    vector3D v2(4,3,5);
 
    (v1+v2).show();
 
    return 0;
}
лучше стало мне кажется) и корректнее!
insideone
Модератор
Автор FAQ
 Аватар для insideone
3630 / 908 / 48
Регистрация: 10.01.2010
Сообщений: 2,446
07.04.2010, 23:37     Сложение векторов #10
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
#include <iostream>
 
class vector3D{
    friend std::ostream& operator <<(std::ostream& out, vector3D& v);
    public:
    vector3D(int inita=0, int initb=0, int initc=0): a(inita), b(initb), c(initc){};
    vector3D operator+(vector3D v2);
 
    private:
    int a;
    int b;
    int c;
 
};
 
vector3D vector3D::operator+(vector3D v2){
    return vector3D(v2.a+a, v2.b+b, v2.c+c);
}
 
std::ostream& operator <<(std::ostream& out, vector3D& v){
    out<<v.a<<","<<v.b<<","<<v.c;
    return out;
}
 
int main()
{
    vector3D v1(1,2,3);
    vector3D v2(4,3,5);
 
    std::cout << v1+v2;
 
    return 0;
}
Или так
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
07.04.2010, 23:41  [ТС]     Сложение векторов #11
insideone, у меня на 30 строку компилятор ругается, поэтому я и show использовал

Добавлено через 1 минуту
странно << перегружана же
Psixodelik
 Аватар для Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
07.04.2010, 23:47     Сложение векторов #12
C++
1
2
3
4
std::ostream& operator <<(std::ostream &out, const vector3D &v){
    out<<v.a<<","<<v.b<<","<<v.c;
        return out;
}
Вот так будет...
insideone
Модератор
Автор FAQ
 Аватар для insideone
3630 / 908 / 48
Регистрация: 10.01.2010
Сообщений: 2,446
07.04.2010, 23:47     Сложение векторов #13
Цитата Сообщение от PointsEqual
insideone, у меня на 30 строку компилятор ругается, поэтому я и show использовал
Странно, о чем ошибка?
Psixodelik
 Аватар для Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
07.04.2010, 23:49     Сложение векторов #14
Ошибка была о несуществующем операторе "<<"...решается добавлением "const" в перегрузке, вот не помню почему именно так, просто нам так препод когда то объяснял)))
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
07.04.2010, 23:50  [ТС]     Сложение векторов #15
K:\c_projects\vector3D_class\main.cpp|30|error: no match for 'operator<<' in 'std::cout << (&v1)->vector3D::operator+(v2)'|
Psixodelik
 Аватар для Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
07.04.2010, 23:51     Сложение векторов #16
PointsEqual, Выше посмотри, я написал как правильно будет
insideone
Модератор
Автор FAQ
 Аватар для insideone
3630 / 908 / 48
Регистрация: 10.01.2010
Сообщений: 2,446
07.04.2010, 23:53     Сложение векторов #17
Psixodelik, ну вообще да, грамотно добавлять const там где данные берутся только для чтения, а возможно для перегрузки потока вывода это имеет и дополнительный смысл... но у меня работало и без него, поэтому не обратил внимания
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
07.04.2010, 23:53  [ТС]     Сложение векторов #18
Psixodelik, я вот и пытаюсь щас конст приделать, токо в какое место там?
AK_U
 Аватар для AK_U
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 22
07.04.2010, 23:56     Сложение векторов #19
А почему #include <iostream> без .h. Или допиши после #include'ов - using namespace std. По моему все должно стать корректным после этого.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2010, 00:00     Сложение векторов
Еще ссылки по теме:

C++ Создать класс для обработки векторов разность векторов норму векторов
C++ Реализовать сложение векторов посредством transform
C++ Сложение векторов строк
Сложение векторов C++

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

Или воспользуйтесь поиском по форуму:
Psixodelik
 Аватар для Psixodelik
40 / 39 / 2
Регистрация: 27.11.2009
Сообщений: 100
08.04.2010, 00:00     Сложение векторов #20
PointsEqual, Моё первое сообщение на второй странице, там рабочая перегрузка написанна(я про это сообщение говорил )


AK_U, В довольно таки новых компиляторах(Visual studio 2008 и т.д., Dev-C++ и многих других) библиотека iostream используется без .h, а использовать пространство имён std не обязательно, можно просто перед cin и cout писать std::
Yandex
Объявления
08.04.2010, 00:00     Сложение векторов
Ответ Создать тему
Опции темы

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