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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2012, 18:36   #1
sidestep
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 93
По умолчанию Строки - ООП (C++)

Добрый вечер всем. Задание надо сделать за 3-4 дня. Сразу скажу, халявы я никакой не жду, а только помощи, так как мало времени для подробного изучения материала - поэтому и написал.

Я знаю СИ достаточно выше среднего для студента курса программирования. НО, тут все полностью на плюсах. Я не изучал никак плюсы. Суть задания - для вас не будет сложна, я уверен. Буду по порядку писать, а тут уже будем смотреть по обстановке.


Перейдем к заданию

Реализуйте класс для хранения строк и безопасной работы с ними (аналог std::string). Каждый объект класса должен хранить значение типа char* и самостоятельно отслеживать, какое количество памяти необходимо для хранения строки.

Пример такого класса:

class String
{
private:
char *data;
...
};

Возможно, вам захочется завести приватное поле для хранение длины строки или указателя на последний элемент.

Необходимо реализовать:

- конструктор по умолчанию (создает пустую строку)
- конструктор с параметром char *
- конструктор копирования
- деструктор (освобождает выделенную память)
- оператор присваивания
- оператор приведения к const char *
- тестовую программу (функция main), проверяющую все перечисленное
- конкатенацию двух строк: операцию + и +=
- проверку этих операторов
- обращение по индексу - два варианта оператора []: константный для чтения, возвращающий char & для изменения
- вставить в оба оператора отладочный вывод и продемонстрировать, в каких случаях каждый вызывается из них



P.S. Просьба тему не удалять, т.к. повторюсь никакой халявы нет, правила я знаю. Кто может чем помочь - спасибо
sidestep вне форума Ответить с цитированием
Старый 13.09.2012, 19:38   #2
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

ничего сложного, просто много рутиной работы. изучи перегрузку операторов и сам вполне осилишь
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.09.2012, 19:49   #3
sidestep
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 93
По умолчанию

Цитата:
ничего сложного, просто много рутиной работы. изучи перегрузку операторов и сам вполне осилишь
Я на это и сам надеюсь. Время жмет, его мало - горит оценка, это важно тоже. Поэтому для ускорения процесса, сюда и написал.
sidestep вне форума Ответить с цитированием
Старый 13.09.2012, 20:02   #4
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

да у того же дохлого страуса был пример такого класса. почитай
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.09.2012, 20:26   #5
sidestep
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 93
По умолчанию

Цитата:
дохлого

------отклонение от темы ------

Почему дохлого?
sidestep вне форума Ответить с цитированием
Старый 13.09.2012, 20:50   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Почему дохлого?
Фамилия у него - Страуструп.
Прикалываются русские

P.S.
Кста я бы на твоем месте посмотрел исходники этого хедера (string).
Хотя бы представление иметь о том как делают.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.09.2012, 22:52   #7
pproger
C++ hater
Старожил
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Stilet
исходники stl сложно читать, новичку уж точно. тем более, std::string перегружен интерфесом итераторов, что автору не нужно, а читать код еще сложнее
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.09.2012, 23:28   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
исходники stl сложно читать
Я же не настраиваю
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2012, 06:31   #9
sidestep
Пользователь
 
Регистрация: 14.09.2011
Сообщений: 93
По умолчанию

Код:
class String 
{
private: 
	char* data;
public:
	String () 
	{
		// конструктор по умолчанию (создает пустую строку)
		data = new char[1];
		data = "";
	}
	String (char* my_stroka) 
	{ 
		// конструктор с параметром
		data = new char[strlen(my_stroka) + 1];
		strcpy(data, my_stroka);
	}
	String (String& my_Str) 
	{
		// конструктор копирования (в качестве параметра передается ссылка на существующий объект)
		int len = strlen(my_Str.data);
		if (len) 
		{
			data = new char[len + 1];
			strcpy(data, my_Str.data);
		} 
		else 
		{
			data = new char[1];
			data = "";
		}
	}
	/*
	~String () 
	{
	// деструктор
	delete[] data;
	}
	*/
деструктор коряво работает, что не так?
sidestep вне форума Ответить с цитированием
Старый 17.09.2012, 10:15   #10
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

В чем заключается его корявоть. Если не ошибаясь то при копировании объектов ошибку выдает?
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сТРОКИ ООП С++ Camom1Le Помощь студентам 0 30.11.2010 21:55
C++ ООП Smile.id Помощь студентам 2 21.02.2010 13:41
ООП AlekDruzh Паскаль, Turbo Pascal, PascalABC.NET 0 09.09.2009 20:32
Паскаль ООП. Примеры программ с использованием ООП SeЯgey Помощь студентам 5 13.05.2009 21:55