Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 27.07.2010, 21:14   #1
HAMANN
Нуждающийся
 
Аватар для HAMANN
 
Регистрация: 05.08.2008
Сообщений: 73
Написано 11 полезных сообщений
(для 24 пользователей)
Объясните пожалуйста перегрузку оператора <<

вот код....

#include <iostream.h>

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()
	{
		cout << this->data << endl;
	}
	
	istream& operator << (istream& stream,string& obj)
	{
		stream << obj.data;
		
		return stream;
	}
};

string str = "123456789";

int main()
{
	cout << str << endl;;
	std::cin >> v;
}
что не правильно в перегрузке?

Последний раз редактировалось HAMANN, 28.07.2010 в 00:14.
(Offline)
 
Ответить с цитированием
Старый 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)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 07:25.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com