Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2009, 00:52   #1
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию задачка перегрузка оператора +

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

вводим массив, программа должна слаживать элемент массива с числом
тоесть к апримеру
mas[10]=101
1+10=102

помогите пожалуста разобратся, вот что у меня получилось:

Код:
#include <iostream.h>
#include <iomanip.h>
#include <iomanip.h>

class massiv
{
int *mas;
int any,n;
public:
massiv();
~massiv();
vvod();
int *operator + (int *cislo){
return (any+mas[cislo]);
	
}

show();
};

massiv::massiv()
{
cout<<"vedite kol vo elementov"<<endl;
cin>>n;
mas = new int[n];
}

massiv::~massiv()
{
delete (mas);
}

massiv::vvod()
{
	cout<<"vedite mas"<<endl;
	for(int i=0; i<n; i++){
	cin>>mas[i];
	}
cout<<"vedite cislo"<<endl;
cin>>any;
}

massiv::show(){
cout<<any;
}

void main(){
massiv bb;
bb+2;
bb.show();
}
z3rg вне форума Ответить с цитированием
Старый 16.03.2009, 01:17   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Не смог уловить, что же, все-таки, здесь должно происходить.
Попробуйте так, что-ли:
Код:
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>

class massiv
{
int *mas;
int any,n;
public:
massiv();
~massiv();
void vvod();
void operator + (const int &cislo){
//return (any+mas[cislo]);
 any += mas[cislo];
}

void show();
};

massiv::massiv()
{
cout<<"vedite kol vo elementov"<<endl;
cin>>n;
mas = new int[n];
}

massiv::~massiv()
{
delete (mas);
}

void massiv::vvod()
{
	cout<<"vedite mas"<<endl;
	for(int i=0; i<n; i++){
	cin>>mas[i];
	}
cout<<"vedite cislo"<<endl;
cin>>any;
}

void massiv::show(){
cout<<any;
}

int main(){
massiv bb;
bb.vvod();
bb+2;
bb.show();
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.03.2009, 01:40   #3
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

Sazary, спасибо большое!!! думал я какуюта фигню вобще спорол, хотя так и есть наверное, вроди работает как надо, смысл вводим массив, и прибовляется к веденному числу элемент масива mas[2] -3 элемент.

а можите обьяснить что тут вобще происходит, почему как я делал не работает

Цитата:
void operator + (const int &cislo){
//return (any+mas[cislo]);
any += mas[cislo];
}

Последний раз редактировалось z3rg; 16.03.2009 в 01:44.
z3rg вне форума Ответить с цитированием
Старый 16.03.2009, 01:48   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а можите обьяснить что тут вобще происходит, почему как я делал не работает
Вы возвращали указатель на результат сложения. Притом возвращали в пустоту.
Как я понял:
Есть класс massiv. Там определен массив и некое число.
Мы вводим этот массив и это число.

Затем, когда пишем
Код:
bb+2;
мы прибавляем к числу (тому самому, которое в классе) элемент массива, с номером 2.
Хотелось бы заметить, что если в массиве, скажем, 2 элемента, то к числу добавится мусор.
Т.к. мы изменяем число в классе massiv, то оператор + ничего не возвращает (к чему это?)
Вот и все..
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.03.2009, 01:57   #5
z3rg
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 25
По умолчанию

Sazary, еще раз спасибо вам.

Цитата:
Хотелось бы заметить, что если в массиве, скажем, 2 элемента, то к числу добавится мусор.
ну да так как прибавляется к числу 3 элемент массива, а мы его не задаем.
надо было зделать чтоб массив не от 0 а от 1 шол

Цитата:
Т.к. мы изменяем число в классе massiv, то оператор + ничего не возвращает (к чему это?)
чесно скзать нз, в книжке по примеру смотрел, там зачемто возращало, -
подумал так и надо.
z3rg вне форума Ответить с цитированием
Старый 16.03.2009, 02:04   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
чесно скзать нз, в книжке по примеру смотрел, там зачемто возращало, -
Ну просто если значение возвращается, то это для чего-то нужно (например, чтобы чему-нибудь это значение присвоить). А так, нет смысла.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.03.2009, 15:18   #7
Lazio
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 113
По умолчанию

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

прога ниже (ну я тут думаю не надо объяснять что и как работает)
Код:
#include "stdafx.h"
#include "func.h"	
#include <conio.h>
#include <iostream>
using namespace std;


void main(void)

{	
	cout<<"Func of two arguments: "<<func(3, 7)<<endl;
	cout<<"Func of three arguments: "<<func(1, 7, 5)<<endl;
	cout<<"Func of four arguments: "<<func(5, 6, 4, 7)<<endl;
	

	
	
	getch();
	
return;	
}
Код хедера func.h

Код:
int func(int a, int b)
{
	return(a*10+b);
}
int func(int a, int b, int c)
{
	return(a*100+b*10+c);
}

int func(int a, int b, int c, int d)
{
	return(a*1000+b*100+c*10+d);
}
Lazio вне форума Ответить с цитированием
Старый 17.03.2009, 13:23   #8
Night_Light
Пользователь
 
Регистрация: 26.02.2009
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Lazio Посмотреть сообщение
я по этой же теме))) сделал вот все бы просто но смущает в условии задача строка использовать функции до их определения чего от меня хотят???
От тебя скорее всего хотят чтобы ты в том месте где используешь функции вначале объявил их прототипы, а реализацию поместил соответственно после места их использования. Почитай про прототипы и форвард декларации.
Night_Light вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка оператора + (С++) MjRed Помощь студентам 1 15.12.2008 18:57
Диапазон оператора switch Иллидан Общие вопросы C/C++ 4 18.05.2008 00:10
Перегрузка оператора Crucian Общие вопросы C/C++ 2 22.10.2007 09:44
завершение работы оператора If Noor Общие вопросы C/C++ 1 14.03.2007 10:07