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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2011, 17:58   #1
Blad47
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 93
По умолчанию 2 проблемы в классах.

Код:
// Kursov.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "iostream"
#include "vector"
#include "string"

using namespace std;

struct date
{
	int day;
	int month;
	int year;
};

struct time
{
	int hour;
	int min;
	int sec;
};


class Base
{
private:
	char* surname;
	int number;
	date date_call;
	double tarif;
	time time_begin;
	time time_end;
public:
	Base();
	~Base();
	void set_surname(char*);
	void set_number(int);
	void set_date(int, int, int);
	void set_tarif(double);
	void set_time_begin(int, int, int);
	void set_time_end(int, int, int);
	char* get_surname();
	int get_number();
	date get_date();
	double get_tarif();
	time get_time_begin();
	time get_time_end();
};

Base::Base()
{
	surname = new char[255];
}


Base::~Base()
{
	delete []surname;
	cout<<"Base deleted"<<"\n";
}

void Base::set_surname(char* Nsurname)
{
    int i;
	surname = new char[20];
	for(i=0;Nsurname[i]!='\0';i++)
	{
		surname[i] = Nsurname[i];
	}
	surname[i] = '\0';
}

void Base::set_number(int Nnumber)
{
	number = Nnumber;
}

void Base::set_date(int day, int month, int year)
{
	date_call.day = day;
	date_call.month = month;
	date_call.year = year;
}

void Base::set_tarif(double Ntarif)
{
	tarif = Ntarif;
}

void Base::set_time_begin(int hour, int min, int sec)
{
	time_begin.hour = hour;
	time_begin.min = min;
	time_begin.sec = sec;
}

void Base::set_time_end(int hour, int min, int sec)
{
	time_end.hour = hour;
	time_end.min = min;
	time_end.sec = sec;
}

char* Base::get_surname()
{
	char* Nsurname;
	Nsurname = new char [20];
	int i;
	for(i=0;surname[i]!='\0';i++)
	{
		Nsurname[i] = surname[i];
	}
	Nsurname[i] = '\0';
	return Nsurname;
}

int Base::get_number()
{
	int Nnumber;
	Nnumber = number;
	return Nnumber;
}

date Base::get_date()
{
	date Ndate_call;
	Ndate_call.day = date_call.day;
	Ndate_call.month = date_call.month;
	Ndate_call.year = date_call.year;
	return Ndate_call;
}

double Base::get_tarif()
{
	return tarif;
}

time Base::get_time_begin()
{
	time Ntime_begin;
	Ntime_begin.hour = time_begin.hour;
	Ntime_begin.min = time_begin.min;
	Ntime_begin.sec = time_begin.sec;
	return Ntime_begin;
}

time Base::get_time_end()
{
	time Ntime_end;
	Ntime_end.hour = time_end.hour;
	Ntime_end.min = time_end.min;
	Ntime_end.sec = time_end.sec;
	return Ntime_end;
}

class List
{
private:
	vector<Base>temp;

public:
	List(){}
	~List()
	{
		temp.clear();
		cout<<"List deleted"<<"\n";
	}
	void add(Base);
	void info();

};

void List::add(Base record)
{
	temp.push_back(record);
	cout<<"record added"<<"\n";
}

void List::info()
{
	for(int i=0;i<temp.size();i++)
	{
		cout<<temp[i].get_surname()<<" ";
		cout<<temp[i].get_number()<<" ";
  /*  	cout<<temp[i].get_date().day<<".";
		cout<<temp[i].get_date().month<<".";
		cout<<temp[i].get_date().year<<" ";
		cout<<temp[i].get_tarif()<<" ";
		cout<<temp[i].get_time_begin().hour<<":";
		cout<<temp[i].get_time_begin().min<<":";
		cout<<temp[i].get_time_begin().sec<<" ";
		cout<<temp[i].get_time_end().hour<<":";
		cout<<temp[i].get_time_end().min<<":";
		cout<<temp[i].get_time_end().sec<<" ";*/
	}
}

int _tmain(int argc, _TCHAR* argv[])
{

	List base;
	Base record;
	//char ans;
	char Nname[20] = {0};
	int Nnumber;
	int day, month, year;
	double Ntarif;
	int hour_b, min_b, sec_b;
    int hour_e, min_e, sec_e;

           cout<<"Name ";
	cin>>Nname;
           record.set_surname(Nname);
	cout<<"number ";
	cin>>Nnumber;
	record.set_number(Nnumber);
/*	cout<<"data ";
	cin>>day>>month>>year;
	record.set_date(day, month, year);
	cout<<"tarif ";
	cin>>Ntarif;
	record.set_tarif(Ntarif);
	cout<<" time_b ";
	cin>>hour_b>>min_b>>sec_b;
	record.set_time_begin(hour_b, min_b, sec_b);
	cout<<" time_e ";
	cin>>hour_e>>min_e>>sec_e;
	record.set_time_end(hour_e, min_e, sec_e);*/

    base.add(record);
	base.info();

	record.~Base();
	base.~List();





	
	return 0;
}
В общем две пробелмы.
Первая - если воспользоваться дебагом, можно проследить, что после выполнянения функции, которая добавляет запись в вектор, переменная Surname теряет значения. ( То есть было "vlad", после выполнения функции имеет значение = "оюююююююююю") Надо разок пронать дебагом и станет понятно о чем речь. Вторая проблема - в конце программы выскакивает ошибка, я не разбираюсь что она значит, но помоему что-то связано с памятью, где то я не освобождаю.

Последний раз редактировалось Blad47; 11.04.2011 в 22:43.
Blad47 вне форума Ответить с цитированием
Старый 11.04.2011, 19:37   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
	record.~Base();
	base.~List();
Не нужно
p51x вне форума Ответить с цитированием
Старый 11.04.2011, 20:57   #3
Blad47
Пользователь
 
Регистрация: 10.11.2008
Сообщений: 93
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
	record.~Base();
	base.~List();
Не нужно
Почему?

Но проблемы это не решает.
Помогите за вознаграждение символическое.
Blad47 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в классах с++ Blad47 Помощь студентам 3 05.04.2011 22:35
проблема в классах jec Общие вопросы C/C++ 3 30.12.2010 11:05
проблема в классах jec Общие вопросы C/C++ 4 29.12.2010 03:39
Вопрос о классах (С++) Александр Елис Помощь студентам 5 25.01.2010 20:49
Перечисления в классах (С++) Александр Елис Помощь студентам 1 22.01.2010 17:10