Показать сообщение отдельно
Старый 28.07.2010, 00:23   #2
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Объясните пожалуйста перегрузку оператора <<

во первых оператор << перегружается внешне, если-бы он перегружался внутренне, надо было бы писать somestring<<cout; (у тебя получается что ему передается ТРИ параметра, два тобой явно указаны, а третий - string*, котрый this.

кстати, судя по реализации, тебе нао перегружать >> не?

#include <iostream>
#include <cstdlib>

char* v;

class string
{
	private:
		char* data;
	public:
	string(char* value_)
	{
		int b = 0;
		char value__ = ' ';

		while(value__ != 0)
			value__ = value_[b++];

		this->data = (char*)realloc(this->data, b);
		for(int c = 0; c < b; ++c)
			this->data[c] = value_[c];
	}

	void echo()
	{
		std::cout << this->data << std::endl;
	}

	friend std::ostream& operator<<(std::ostream& stream,string& obj);
};

std::ostream& operator<<(std::ostream& stream,string& obj)
{
    stream << obj.data;

    return stream;
}

string str = "123456789";

int main()
{
	std::cout << str << std::endl;;
	std::cin >> v;
}
теперь собственно придирки:
1. char *v - глобальная переменная. совершенно ненужная причем.

2. value__ - двойное подчеркивание зарезервированно компиляторами и стандартной библиотекой, не стоит его использовать в своих именах.

3.
while(value__ != 0)
value__ = value_[b++];
не проще ли было просто написать:
while(value_[b++])?? или даже еще лучше:
b = strlen(value_)

4. самое главное - что за тупой, не, ТУПОЙ, realloc? понтанулся что знаешь такую команду? или зачем? ты вкурсе что у тебя в data на момент вызова realloc-а, мусор? вот поситай: http://www.codenet.ru/progr/cpp/spru/realloc.php
malloc и все тут.
еще лучше new char[b];
по крайней мее так твоя программа не валится.

5. приведение типа в старом стиле ненужны. учи static, reinterpret, const и dynamic cast-ы. если не хочешь учить - используй static_cast заместо приведения в старом стиле.

Последний раз редактировалось HolyDel, 28.07.2010 в 09:07.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
Arles (28.07.2010), HAMANN (28.07.2010), Harter (28.07.2010)