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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2010, 22:15   #1
Aerial
Пользователь
 
Аватар для Aerial
 
Регистрация: 12.04.2010
Сообщений: 17
По умолчанию Объясните задание, не могу понять что от меня хотят)

Код:
/*	Переопределите оператор ++ для указателя на массив целых, обработайте ошибку выхода за границы массива.	*/
Собственно сабж, дальше сам разберусь)
Появился еще один вопрос, можно ли перегрузить оператор без формальных операторов типа класс?
P.S. то что это перегрузка операторов ясно итак, что именно она должна делать, это не пойму.

Последний раз редактировалось Aerial; 10.12.2010 в 23:14.
Aerial вне форума Ответить с цитированием
Старый 10.12.2010, 23:21   #2
Aerial
Пользователь
 
Аватар для Aerial
 
Регистрация: 12.04.2010
Сообщений: 17
По умолчанию

Вот как я понял, что должен делать оператор, но смог перегрузить только для +
Код:
#include "stdafx.h"
#include <iostream>
#include <time.h>
using namespace std;
/*	Переопределите оператор ++ для указателя на массив целых, обработайте ошибку выхода за границы массива.	*/
class array_
{
	int *A;
	int n;
public:
	array_(int N) : n(N)
	{	
		A = new int[n];
		for(int i=0;i<n;i++)
			A[i] = rand()%80+10;
	}
	void show()
	{
		for(int i=0;i<n;i++)
			cout<<A[i]<<' ';
		cout<<endl;
	}
	int& operator+(int i)
	{	
		if( (i < 0) || ( i >= n ))
			throw "Yohohoh!";
		return A[i];
	}
	int& operator++ (int &A)
	{
		return &A;
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"RUSSIAN");
	time_t t;
	srand(time(&t));

	array_ Aa(10);
	int i;
	cout<<"Введите номер элемента, для доступа к нему: "; cin>>i;
	try{
		cout<<"Значение элемента равно:\t"<<Aa+(i-1)<<endl;;
	}
	catch(char *err){
		cout<<"\nERROOOOOOR!\t Выход за пределы массива!\n";
	}

	system("PAUSE");
	return 0;
}
Aerial вне форума Ответить с цитированием
Старый 10.12.2010, 23:53   #3
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Это и все задание было? Просто я в душе не понимаю, что может делать массив, когда его инкрементируют... Хм.. У меня такие мысли:
а) при ++ каждый элемент массива увеличивается на 1
Код:
//operator ++ postfics (arr++)
array_ operator++()
{
	for(int i=0;i<n;i++)
	{
		A[i]++;
	}
	return *this;
}
	
//operator ++ prefiks (++arr)
array_ operator++(int)
{
	array_ temp = *this;
	for(int i=0;i<n;i++)
	{
		A[i]++;
	}
	return temp;
}
2) при ++ сам массив увеличивается(удлинняется) на 1 элемент (готового кода нет, алгоритм: в функции создаете новый массив на n+1 элементов, присваиваете ему значения из старого массива, значение добавленного элемента рандомно генерируете. Затем указателю A присваиваете адрес нового массива. n, конечно же, тоже увеличиваете и возвращаете по аналогии с приведенным кодом)
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 11.12.2010, 02:00   #4
Aerial
Пользователь
 
Аватар для Aerial
 
Регистрация: 12.04.2010
Сообщений: 17
По умолчанию

ACE Valery, спасибо, но я думаю все же в задании требуется другое.
Да, это полное задание, не обрывок. Потому и возникли проблемы с пониманием задания. А вообще тема задания, исключительные ситуации и их обработка, то есть перегрузка тут как фон, но..

И все же вопрос остается открытым, что имеют в виду под:
Код:
Переопределите оператор ++ для указателя на массив целых
Могла ли это быть опечатка, я мой вариант для перегрузки + правильный?
Aerial вне форума Ответить с цитированием
Старый 11.12.2010, 02:25   #5
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,378
По умолчанию

Если вам задали перегрузить оператор и не сказали, как именно, то вы вправе перегружать так, как вам хочется.
Есть еще одна идея: перегрузите ++ так же, как перегрузили +. Вместе с массивом и размерностью храните в классе какой-то указатель(даже не указатель, а какую-то интовую переменную), и каждый раз при ++ увеличивайте его на 1, там же и проверяйте - не выходит ли этот указатель за границы массива.
Больше пока ничего в голову не лезет...
А вообще я б на вашем месте доставала препода, пока он бы не объяснил мне четко, что от меня требуется.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 11.12.2010, 09:19   #6
Ru_DoLF
Ubuntu 10.04
Пользователь
 
Аватар для Ru_DoLF
 
Регистрация: 15.07.2010
Сообщений: 51
По умолчанию

Aerial, скорее всего вас просят сделать арифметику указателей.
Язык образует среду мышления и формирует представление о том, о чем мы думаем (Б. Л. Уорф)
Ru_DoLF вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять что не так aferistz Общие вопросы C/C++ 5 23.09.2010 02:21
Не могу понять задание amandra Помощь студентам 11 16.10.2007 10:24
Не могу понять задание Юдифь Помощь студентам 2 12.12.2006 17:40