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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2010, 13:06   #1
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию Перегрузка оператора [] (Страуструп)

Читаю Страуструпа. Там пример реализации класса String.
Код:

class String
{
private:
	class Cref
	{
		friend class String;
	private:
		String &s;
		int i;
		Cref(String &ss, int ii):s(ss),i(ii){}
	public:
		operator char()const{return s.read(i);}
		void operator = (char c){return s.write(i, c);}
	};

	Srep *rep;
public:
        ....
        ....
	void check(int)const;
	char read(int)const;
	void write(int, char);

	Cref operator[](int ind)
	{
		check(ind);
		return Cref(*this, ind);
	}
	char operator[](int ind)const
	{
		check(ind);
		return rep->str[ind];
	};
	
};
Не могу понять почему работает это. Почему когда я пишу String s;s[0] = 'a' вызывается Cref operator[](int ind) и зачем тут вообще отдельный класс Cref почему он работает так же как и char&?
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ перегрузка оператора cati Помощь студентам 10 21.04.2010 23:38
перегрузка оператора << z3rg Общие вопросы C/C++ 18 02.03.2010 02:58
перегрузка оператора [] в c++ terminadoor Общие вопросы C/C++ 3 21.01.2010 15:44
Перегрузка оператора + z3rg Общие вопросы C/C++ 1 22.03.2009 03:06
Перегрузка оператора + (С++) MjRed Помощь студентам 1 15.12.2008 18:57