Форум программистов, компьютерный форум, киберфорум
Наши страницы

Перегрузка бинарного оператора + - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ задача с дополнительным условием http://www.cyberforum.ru/cpp-beginners/thread712698.html
Вывести на экран в виде таблицы значения функции F на интервале от Xнач до Xкон с шагом H. Значения a,b,c,Xнач,Xкон,H-действительные числа, вводятся с клавиатуры. Задачу необходимо решить двумя...
C++ Составить программу, которая будет выводить true или false в зависимости от принадлежности точки с координатами x, y закрашенной области Составить программу, которая будет выводить true или false в зависимости от принадлежности точки с координатами x, y закрашенной области: http://www.cyberforum.ru/cpp-beginners/thread712689.html
Считывание массива из файла C++
#include <iostream> #include <fstream> using namespace std; int main () { int i,j; int matr1; FILE *f1;
C++ Дана целочисленная прямоугольная матрица. Определить:
Массивы. Программа должна запрашивать размеры матрицы и самостоятельно заполнять ее с помощью генератора случайных чисел. Верхняя граница для значения элементов матрицы также вводится с клавиатуры....
C++ Сформулировать результат выполнения функции http://www.cyberforum.ru/cpp-beginners/thread712676.html
Сформулировать результат выполнения функции, определить назначение ("смысловую нагрузку") использованных переменных, написать вызов функции. int F (int n, int c){ int i,j, k, m; for (i=k=m=0;...
C++ Найти все натуральные числа в диапазоне между m и n (m<n), в записи которых нет двух одинаковых цифр. Подсчитать количество таких чисел. Найти все натуральные числа в диапазоне между m и n (m<n), в записи которых нет двух одинаковых цифр. Подсчитать количество таких чисел. подробнее

Показать сообщение отдельно
Magister
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 6

Перегрузка бинарного оператора + - C++

28.11.2012, 22:28. Просмотров 721. Ответов 5
Метки (Все метки)

Добрый вечер! В последнее время мне не удаётся перегрузить оператор +, чтобы он поэлементно складывал одномерные массивы двух классов.
Перегрузка оператора
C++
1
2
3
4
5
6
7
8
9
Vector Vector::operator+(const Vector& right)
{
    int requiredSize = (this->size <= right.size)? this->size : right.size;
    Vector temp(requiredSize);
    for(int i = 0; i < requiredSize; i++)
            temp.massiv[i] = this->massiv[i] + right.massiv[i];
    
    return temp;
}
Кликните здесь для просмотра всего текста

Интерфейс класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
class Vector
{
public:
    Vector operator+(const Vector& right);
    int& operator [](int);
    void view();
    void input();
    int getSize();
    void setSize(int);
    Vector(int);
    Vector(void);
    ~Vector(void);
private:
    int *massiv;
    int size;
};
Реализация класса:
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 "StdAfx.h"
#include "Vector.h"
 
Vector Vector::operator+(const Vector& right)
{
    int requiredSize = (this->size <= right.size)? this->size : right.size;
    Vector temp(requiredSize);
    for(int i = 0; i < requiredSize; i++)
            temp.massiv[i] = this->massiv[i] + right.massiv[i];
    
    return temp;
}
 
int& Vector::operator[] (int index)
{
    if (index < 0)
    {
        cerr << "Out of memory ( massiv[i]<0 )";
        return massiv[0];
    }
    else
        if (index >= size)
        {
            cerr << "Out of memory ( massiv[i]>=0 )";
            return massiv[size-1];      
        }
        else
            return massiv[index];
}
 
void Vector::view()
{
    for (int i = 0; i < size; i++)
    {
        cout << massiv[i] << " ";
    }
    cout << endl;
}
void Vector::input()
{
    for(int i = 0; i < size; i++)
    {
        cout << "Vector[" << i << "] = ";
        cin >> massiv[i];
    }
 
}
 
int Vector::getSize()
{
    return size;
}
void Vector::setSize(int s)
{
    size = s;
}
Vector::Vector(void)
{
    size = 3;
    massiv = new int[3];
}
 
Vector::Vector(int s)
{
    size = s;
    massiv = new int[size];
}
 
 
Vector::~Vector(void)
{
    delete massiv;
}
И главная часть программы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include "Vector.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    Vector v1(3), v2(3), v3(3);
 
    v1.input();
    v2.input();
    v3 = v1 + v2;
    v3.view();
    
    v1.~Vector();
    v2.~Vector();
    v3.~Vector();
    return 0;
}


Ошибки не выдаются, но на моём пути встречаются несколько подводных камней:
Не выводится результат на экран, будто из функции не передалось значение обратно. Если написать так:
C++
1
(v1+v2).view();
Вывод сработает и покажет, что результат не передался. Кроме того, вместо стандартной фразы "Нажмите на любую клавишу", придётся вручную закрывать приложение. Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.