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

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

Восстановить пароль Регистрация
 
Al51193Sl
0 / 0 / 0
Регистрация: 22.04.2014
Сообщений: 7
11.06.2014, 11:21     Перегрузка оператора ++ #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "Operation.h"
using namespace std;
 
const int COUNT = 10;
int _tmain(int argc, _TCHAR* argv[])
{
    srand((unsigned int)time(NULL));
    Operation A(COUNT);
    Operation B(COUNT);
    A-=B;
    cout<<"Result A:"; A.showContent();
    cout<<"Result B:"; B.showContent();
    system("pause");
    return 0;
}



у меня делает вот такую перегрузку,а как задать так,чтобы пегегрузка ++ (b=++a)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2014, 11:21     Перегрузка оператора ++
Посмотрите здесь:

C++ Перегрузка оператора ()
Перегрузка оператора C++
C++ Перегрузка оператора []
C++ Перегрузка оператора ->
C++ Перегрузка оператора <<
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
11.06.2014, 11:45     Перегрузка оператора ++ #2
хотелось бы посмотреть на саму реализацию класса
Al51193Sl
0 / 0 / 0
Регистрация: 22.04.2014
Сообщений: 7
11.06.2014, 11:52  [ТС]     Перегрузка оператора ++ #3
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
// Raznost.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "Operation.h"
using namespace std;
 
const int COUNT = 10;
int _tmain(int argc, _TCHAR* argv[])
{
    srand((unsigned int)time(NULL));
    Operation A(COUNT);
    Operation B(COUNT);
    A-=B;
    cout<<"Result A:"; A.showContent();
    cout<<"Result B:"; B.showContent();
    system("pause");
    return 0;
}
 
//Operation.h
//класс с перегруженным оператором -=
#pragma once
#include <vector>
#include <ctime>
#include <iostream>
#include <stdlib.h>  
using namespace std;
 
class Operation
{
public:
    Operation(int count);
    Operation operator -= (Operation vectorOut);
    void showContent();
    ~Operation(void);
private:
    vector<int> vectorIn;
};
 
 
//Operation.cpp
#include "stdafx.h"
#include "Operation.h"
 
Operation::Operation(int count)
{
    for (int i=0; i < count; i++) {
        vectorIn.push_back(rand()%100+1);
    }
    cout<<"Create: ";
    for(int i = 0; i < count; i++) cout << vectorIn[i] << "  ";
    cout<<endl;
}
//вычисляем разность каждого элемента в массиве, возвращаем указатель на себя
Operation Operation::operator -=(Operation vectorOut){
    for (int i=0; i< vectorIn.size(); i++){
        vectorIn[i] = vectorIn[i]-vectorOut.vectorIn[i];
    }
    return *this;
}
 
void Operation::showContent(){
    for(int i = 0; i < vectorIn.size(); i++) cout << vectorIn[i] << "  ";
    cout<<endl;
}
 
Operation::~Operation(void) {vectorIn.clear();}
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
11.06.2014, 12:00     Перегрузка оператора ++ #4
а что этот оператор (b=++a) должен делать?
Al51193Sl
0 / 0 / 0
Регистрация: 22.04.2014
Сообщений: 7
11.06.2014, 12:25  [ТС]     Перегрузка оператора ++ #5
jurok_85,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Raznost.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "Operation.h"
using namespace std;
 
const int COUNT = 10;
int _tmain(int argc, _TCHAR* argv[])
{
srand((unsigned int)time(NULL));
Operation A(COUNT);
Operation B(COUNT);
A-=B;
cout<<"Result A:"; A.showContent();
cout<<"Result B:"; B.showContent();
system("pause");
return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Operation.h
//класс с перегруженным оператором -=
#pragma once
#include <vector>
#include <ctime>
#include <iostream>
#include <stdlib.h> 
using namespace std;
 
class Operation
{
public:
Operation(int count);
Operation operator -= (Operation vectorOut);
void showContent();
~Operation(void);
private:
vector<int> vectorIn;
};
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
//Operation.cpp
#include "stdafx.h"
#include "Operation.h"
 
Operation::Operation(int count)
{
for (int i=0; i < count; i++) {
vectorIn.push_back(rand()%100+1);
}
cout<<"Create: ";
for(int i = 0; i < count; i++) cout << vectorIn[i] << " ";
cout<<endl;
}
//вычисляем разность каждого элемента в массиве, возвращаем указатель на себя
Operation Operation::operator -=(Operation vectorOut){
for (int i=0; i< vectorIn.size(); i++){
vectorIn[i] = vectorIn[i]-vectorOut.vectorIn[i];
}
return *this;
}
 
void Operation::showContent(){
for(int i = 0; i < vectorIn.size(); i++) cout << vectorIn[i] << " ";
cout<<endl;
}
 
Operation::~Operation(void) {vectorIn.clear();}
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
11.06.2014, 16:40     Перегрузка оператора ++ #6
Цитата Сообщение от Al51193Sl Посмотреть сообщение
(b=++a)
вызываем оператор = (его сгенерит компилятор можно не парится) в времы вызова мы начени определять аргументы и вызовется оператор++() преинкремент,
для него
C++
1
2
3
4
5
6
7
const Operation& operator++()
{
for (int i=0; i< vectorIn.size(); i++){
vectorIn[i]++;
}
return *this;
}
Добавлено через 2 минуты
C++
1
const Operation& operator -= (const Operation& vectorOut);
и это подправьте)

Добавлено через 2 минуты
Цитата Сообщение от Al51193Sl Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
Operation Operation::operator -=(Operation vectorOut)
{ 
for (int i=0; i< vectorIn.size(); i++)
{ 
vectorIn[i] = vectorIn[i]-vectorOut.vectorIn[i];
 }
 return *this;
 }
а Вас не напрягает что вообще гововоря size у this и size у vectorOut могут быть различными, хотя в мейни они и одинаковые, но все же
Yandex
Объявления
11.06.2014, 16:40     Перегрузка оператора ++
Ответ Создать тему
Опции темы

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