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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2015, 19:51   #1
FrostBelarus
Пользователь
 
Регистрация: 10.11.2014
Сообщений: 23
По умолчанию Зацикливание односвязного списка с++(ООП)

Доброго дня.
Есть задача : написать программу, в которой создаются объекты различных классов и помещаются в список (методом класса), после чего список просматривается.
Проблема: при просмотре список зацикливается на одном значении.Причем если инициализировать объект при создании(ps = new slushahi("Ivan",30, 15), то все работает. Если вводить с клавиатуры, то список зацикливается на первом введенном значении.
ConsoleApplication1.cpp:
Код:
#include "stdafx.h"
#include "Persona.h"
#include "Ingineer.h" 
#include "Slushahi.h"
#include "list.h"
#include "locale"
#include <iostream> 

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "rus");
	List list;
	slushahi *ps;
	ingineer *pi;
	ps = new slushahi("Ivan",30, 15);
	list.Input(ps);
	pi = new ingineer("Petr",29, 4);
	list.Input(pi);
	ps = new slushahi;
	ps->Input();
	list.Input(ps);
	pi = new ingineer;
	pi->Input();
	list.Input(ps);
	list.Show();
	return 0;
}
persona.h:
Код:
#pragma once

#include<iostream>
#include <cstring>
#include <string.h>

class persona
{
public:
	persona();
	persona(char *name,int age);
	virtual void Show(void)=0;
	virtual void Input(void) = 0;
	virtual ~persona(void);
protected:
	char name[20];
	int age;
	persona *next;
	friend class List;
};
persona.cpp:
Код:
#include "stdafx.h"
#include <cstring>
#include <string.h>
#include "persona.h"
#include <iostream> 

using namespace std; 

persona::persona()
{
	strcpy(name,"noname");
	age = 0;
	next = 0;
};

persona::persona(char *name,int age)
{
	strcpy(this->name , name);
	this->age = age;
	next = 0;
}

persona::~persona(void)
{ 
	cout << "Вызов деструктора персоны" << endl;
}
ingineer.h:
Код:
#pragma once

#include "Persona.h"
#include<iostream>

class ingineer:public persona
{
public:
	ingineer();
	ingineer(char *name,int age, int work_year);
	void Show(void);
	void Input(void);
protected:
	int work_year;
};
ingineer.cpp:
Код:
#include "stdafx.h"
#include "Ingineer.h"
#include <iostream> 

using namespace std;

ingineer::ingineer()
{
	work_year = 0;
	cout << "Вызов конструктора инжинера" << endl;
}

ingineer::ingineer(char *name, int age, int work_year) :persona(name,age)
{
	this->work_year = work_year;
}

void ingineer::Show(void)
{
	cout << "Name: " << name << endl;
	cout << "Age: " <<age<< endl;
	cout << "Work year: " << work_year << endl;
}

void ingineer::Input(void)
{
	cout << "Name: ";
	cin >> name;
	cout << "Age: ";
	cin >> age;
	cout << "Work Year: ";
	cin >> work_year;
}
slushahi.h:
Код:
#pragma once

#include "Persona.h"

class slushahi:public persona
{
public:
	slushahi();
	slushahi(char *name,int age, int zar);
	void Show(void);
	void Input(void);
protected:
	int zar;
};
slushahi.cpp:
Код:
#include "stdafx.h"
#include "Slushahi.h"
#include <iostream> 

using namespace std;

slushahi::slushahi()
{
	zar = 0;
	cout << "Вызов конструктора служащего" << endl;
}

slushahi::slushahi(char *name,int age, int zar):persona(name,age)
{
	this->zar = zar;
}

void slushahi::Show(void)
{
	cout << "Name: " << name << endl;
	cout << "Age: " << age << endl;
	cout << "Zar: " << zar << endl;
}

void slushahi::Input(void)
{
	cout << "Name: ";
	cin >> name;
	cout << "Age: ";
	cin >> age;
	cout << "Zar: ";
	cin >> zar;
}
list.h
Код:
#pragma once

#include"Persona.h"

class List
{
public:
	List();
	~List();
	void Input(persona *);
	void Show(void);
protected:
	persona *begin;
};
list.cpp
Код:
#include "stdafx.h"
#include"list.h"

List::List()
{
	begin = 0;
}

List::~List()
{
	persona *tmp;
	while (begin)
	{
		tmp = begin;
		begin = begin->next;
		delete tmp;
	}
}

void List::Show(void)
{
	persona *tmp;
	tmp = begin;
	while (tmp)
	{
		tmp->Show();
		tmp = tmp->next;
	}
}

void List::Input(persona *old)
{
	persona *tmp;
	tmp = begin;
	begin = old;
	old->next = tmp;
}
результат программы вложен.
(введенные параметры:
name:sl
age:12
zar:45
name:in
age:45
work_year:54
значения тестовые)
Изображения
Тип файла: jpg 1.jpg (21.6 Кб, 32 просмотров)

Последний раз редактировалось FrostBelarus; 25.10.2015 в 19:57.
FrostBelarus вне форума Ответить с цитированием
Старый 25.10.2015, 20:48   #2
FrostBelarus
Пользователь
 
Регистрация: 10.11.2014
Сообщений: 23
По умолчанию

Прощу прощения за тему. Ошибка оказалась глупейшей. в consoleaplication1.cpp в конце, вместо list.Input(ps); надо было поставить list.Input(pi);
тему можно удалять\закрывать
FrostBelarus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка односвязного списка Levenyatko Общие вопросы C/C++ 0 05.07.2012 22:12
Сортировка односвязного списка (C++) biograf Помощь студентам 0 14.12.2010 21:21
Сортировка односвязного списка amerhant Общие вопросы C/C++ 1 13.05.2010 20:25
Сортировка односвязного списка btf Общие вопросы C/C++ 0 15.02.2010 14:40
Cортировка односвязного списка alesfoss Общие вопросы C/C++ 3 30.03.2009 19:46