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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2012, 13:41   #1
iris_ka
Пользователь
 
Регистрация: 10.02.2012
Сообщений: 44
Вопрос С++. ошибка в коде

надо было создать класс для работы со строками.
и проверить его работу тестовой программкой.
не могу понять, где ошибка.
программа просто не выводит ничего.
кто сможет-подскажите)

Код:
#include <iostream>
#include <string.h>
#include <conio.h>
#include "string"

class string
{ private:
          char *data;
  public:
         string();
         string(char *st);
         string(const string &stco);
         ~string();
         string &operator=(const string &stco);
         operator const char *() const;
         
         
};

string::string()
{data=new char[1];
data='\0';
}

string::string(char*st)
{data=new char[strlen(st)+1];
strcpy(data, st);
}

string::string(const string& st)
{data=new char[strlen(st.data)+1];
strcpy(data, st.data);
}

string::~string()
{delete[] data;
}

string& string:: operator=(const string &stco)
{data=new char[strlen(stco.data)+1];
strcpy(data, stco.data);
return *this;
}

string:: operator const char *() const
{return data;
}

int main()
{string s1;
std::cout<<s1<<std::endl;

string s2("stroki");
std::cout<<s2<<std::endl;

string s3(s2);
std::cout<<s3<<std::endl;

s1=s2;
std::cout<<s1<<std::endl;
getchar();
return 0;
}

Последний раз редактировалось Stilet; 23.09.2012 в 14:12.
iris_ka вне форума Ответить с цитированием
Старый 23.09.2012, 20:08   #2
iris_ka
Пользователь
 
Регистрация: 10.02.2012
Сообщений: 44
По умолчанию

я уже голову сломала.не пойму,почему не работает.
это моя первая программа на С++.
так что подозреваю,что с синтаксисом что-то не то.или не все библиотеки подключила.
очень прошу помочь.
iris_ka вне форума Ответить с цитированием
Старый 23.09.2012, 20:27   #3
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

самое первое что приходит в голову поменять название класса, хотя по идее все должно работать, называть так класс все же не стоит. И зачем вот ето


#include <string.h>
#include <conio.h>
#include "string"
rUs_LAN вне форума Ответить с цитированием
Старый 23.09.2012, 20:40   #4
iris_ka
Пользователь
 
Регистрация: 10.02.2012
Сообщений: 44
По умолчанию

string.h -для strlen, strcpy
conio.h-для задержки.хотя эт необязательно.
"string"- это чтоб мой класс работал.
или всего этого не надо?
iris_ka вне форума Ответить с цитированием
Старый 23.09.2012, 20:59   #5
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
это моя первая программа на С++.
первая программа и сразу бездумно копипастим? - нехорошо.
Цитата:
"string"- это чтоб мой класс работал.
нет.
Код:
#include <iostream>
#include <cstring>

class string {
private:
	char *data;
public:
	string();
	string(const char *st);
	string(const string &stco);
	~string();
	string &operator=(const string &stco);
	operator const char *() const;
};

string::string() {
	data = new char[1];
	data = '\0';
}

string::string(const char *st) {
	data = new char[strlen(st) + 1];
	strcpy(data, st);
}

string::string(const string& st) {
	data = new char[strlen(st.data) + 1];
	strcpy(data, st.data);
}

string::~string() {
	delete[] data;
}

string& string::operator=(const string &stco) {
	data = new char[strlen(stco.data) + 1];
	strcpy(data, stco.data);
	return *this;
}

string::operator const char *() const {
	return data;
}

int main() {
	string s1;
	std::cout << s1 << std::endl;

	string s2("stroki");
	std::cout << s2 << std::endl;

	string s3(s2);
	std::cout << s3 << std::endl;

	s1 = s2;
	std::cout << s1 << std::endl;
	return 0;
}
собирается, но вы используете оператор << для вывода, но он не перегружен в вашем классе.
rrrFer вне форума Ответить с цитированием
Старый 23.09.2012, 21:10   #6
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

хух помоем нашел, изменитe коструктор по умолчанию так
Код:
string::string()
{
	data=new char[1];
	*data='\0';
}
ADD: Работает?

Последний раз редактировалось rUs_LAN; 23.09.2012 в 21:21.
rUs_LAN вне форума Ответить с цитированием
Старый 23.09.2012, 21:25   #7
iris_ka
Пользователь
 
Регистрация: 10.02.2012
Сообщений: 44
По умолчанию

обязательно ли в данном случае перегружать оператор?
нельзя использовать как стандартный?
iris_ka вне форума Ответить с цитированием
Старый 23.09.2012, 21:28   #8
iris_ka
Пользователь
 
Регистрация: 10.02.2012
Сообщений: 44
По умолчанию

rUs_LAN, сработало))
спасибо)
только не до конца поняла, почему нельзя было просто"data" написать?
iris_ka вне форума Ответить с цитированием
Старый 23.09.2012, 21:43   #9
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

потому что data ето указатель
rUs_LAN вне форума Ответить с цитированием
Старый 23.09.2012, 21:48   #10
iris_ka
Пользователь
 
Регистрация: 10.02.2012
Сообщений: 44
По умолчанию

это понятно)
а на сколько правомерно я могла бы написать
data[0]='\0'; ?
iris_ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
ошибка в коде С Mr.Merso Помощь студентам 4 10.05.2011 00:52
Ошибка в коде drzod C# (си шарп) 1 21.02.2011 12:03
ошибка в коде sanya94 Общие вопросы C/C++ 15 12.01.2011 19:26
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58