Код:
// 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", после выполнения функции имеет значение = "оюююююююююю") Надо разок пронать дебагом и станет понятно о чем речь. Вторая проблема - в конце программы выскакивает ошибка, я не разбираюсь что она значит, но помоему что-то связано с памятью, где то я не освобождаю.