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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2015, 18:52   #1
dykee
Пользователь
 
Регистрация: 09.10.2013
Сообщений: 78
По умолчанию редкая ошибка связанная с переполнением стека С++

Значит ситуация такая, вот весь код он полностью рабочий, но для перегрузки потокового ввода вылетает и пишет, что стек переполнен. Сколько к преподам не обращался не знают говорят увеличь размер стека(хоть это не решение проблемы)
Сама задача:
Создать иерархию классов здание, административное здание и жилое здание. Переопределить вывод в поток и ввод из потока, конструктор копирования, оператор присваивания через соответствующие функции базового класса.
P.S. в синтаксисе потокового ввода все нормально "конст" нужен
Код:
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;


class building 
{
protected:
	int beton;
public:
	building () {}
	building (int r) : beton(r) {}
	 
	void show()
	{
		cout<<"col-vo ton betona: "<<beton<<endl;
	}
	
	building& operator=(building b);
	building(const building &m);
	
	~building() {}
};


building::building(const building &m)
{
	beton=m.beton;
}
building& building::operator=(building b)
{
	return b;

}

class admin_building : public building
{
private:
	int col_window;
public:
	
	admin_building (int z) : col_window (z) { }
	admin_building() {}
	friend istream &operator >> (istream &in, const admin_building& i);
	friend ostream &operator << (ostream &out, const admin_building& w);
	

	
	void print()
	{
		cout<<"col-vo okon:"<<col_window<<endl;
	}
	~admin_building() {}
};
istream &operator >> (istream &in, const admin_building& i)
{
	in>>i.col_window;
	return in;

}
ostream &operator << (ostream &out, const admin_building& w)
{
	out<<"count windows: "<<w.col_window;
	return out;
}
class res_building : public building
{
private:
	int col_human;
public:
	void print_human()
	{
		cout<<" kol-vo  l10dey:"<<col_human<<endl;
	}
	 res_building(int r) : col_human (r) { }

};

int main()
{
	
	//admin_building b;
	//cin>>b;
	//cout<<b;
	building q(1000);
	q.show();
	cout<<"///////////"<<endl;
	building m=q;
	m.show();
	admin_building b(8);
	b.print();
	cout<<"///////////"<<endl;
	admin_building p=b;
	p.print();
	res_building c(7);
	c.print_human();*/
	_getch();
	return 0;
}
dykee вне форума Ответить с цитированием
Старый 28.04.2015, 20:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

На сколько понял проблема в том что оператор in>>i.col_window; опять вызывает перегрузку admin_building-а. Потому и рекурсия. Если его закоментировать то проблем не возникнет. Возможно тебе придется использовать что-то другое нежели >> внутри перегруженного оператора.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2015, 20:36   #3
dykee
Пользователь
 
Регистрация: 09.10.2013
Сообщений: 78
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
На сколько понял проблема в том что оператор in>>i.col_window; опять вызывает перегрузку admin_building-а. Потому и рекурсия. Если его закоментировать то проблем не возникнет. Возможно тебе придется использовать что-то другое нежели >> внутри перегруженного оператора.
Ну у меня просто ж задание реализовать это... А как? Вам на ум не приходит хотя бы идея.
+ когда я компилирую он мне показывает стрелочку на конструктор по умолчанию в базовом классе.
Код:
public:
	->building () {}

Последний раз редактировалось dykee; 28.04.2015 в 20:39.
dykee вне форума Ответить с цитированием
Старый 28.04.2015, 20:48   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да я не знаю Си настолько глубоко )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.04.2015, 21:18   #5
dykee
Пользователь
 
Регистрация: 09.10.2013
Сообщений: 78
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Да я не знаю Си настолько глубоко )
это плюсы)
Код:
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;


class building 
{
protected:
	int beton;
public:
	building () {}
	building (int r) : beton(r) {}
	 
	void show()
	{
		cout<<"col-vo ton betona: "<<beton<<endl;
	}
	
	building& operator=(building b);
	building(const building &m);
	
	~building() {}
};


building::building(const building &m)
{
	beton=m.beton;
}
building& building::operator=(building b)
{
	return b;

}

class admin_building : public building
{
private:
	int col_window;
public:
	
	admin_building (int z) : col_window (z) { }
	admin_building() {}
	friend istream &operator >> (istream &in,  admin_building& i);
	friend ostream &operator << (ostream &out, const admin_building& w);
	

	
	void print()
	{
		cout<<"col-vo okon:"<<col_window<<endl;
	}
	~admin_building() {}
};
istream &operator >> (istream &in,  admin_building& i)
{
	in>>i.col_window;
	return in;

}
ostream &operator << (ostream &out, const admin_building& w)
{
	out<<"count windows: "<<w.col_window;
	return out;
}
class res_building : public building
{
private:
	int col_human;
public:
	void print_human()
	{
		cout<<" kol-vo  l10dey:"<<col_human<<endl;
	}
	 res_building(int r) : col_human (r) { }

};

int main()
{
	
	//admin_building b;
	//cin>>b;
	//cout<<b;
	building q(1000);
	q.show();
	cout<<"///////////"<<endl;
	building m=q;
	m.show();
	admin_building b(8);
	b.print();
	cout<<"///////////"<<endl;
	admin_building p=b;
	p.print();
	res_building c(7);
	c.print_human();*/
	_getch();
	return 0;
}
теперь работает)

Последний раз редактировалось dykee; 28.04.2015 в 21:51.
dykee вне форума Ответить с цитированием
Старый 28.04.2015, 21:52   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я знаю что плюсы.
Я не специалист по ООП в Си. Я делфиец.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка,связанная с памятью Gdasar C++ Builder 10 04.02.2015 12:33
ошибка связанная с С++? MultiFrukt Компьютерное железо 4 26.05.2012 13:45
возникает ошибка, связанная с StrToInt в Delphi Kurai Помощь студентам 3 07.04.2010 20:38
Ошибка связанная с floating point... bloodeagle Помощь студентам 1 18.02.2010 18:15
Ошибка, связанная с загрузкой из файла! kayman Помощь студентам 5 01.06.2008 21:23