#pragma once
class person
{
public:
// Конструктор
person(const char* const firstName=0,const char* const lastName=0);
// Конструктор копирования
person(const person& l);
// Оператор присваивания
person& operator=(const person& l);
// Деструктор
virtual ~person();
const char* lastName() const;
const char* firstName() const;
private:
void dispose();
char* alloc(const char* const str);
char* _firstName;
char* _lastName;
};
#include <cstring>
#include "person.h"
const char* person::firstName() const
{
return _firstName;
}
const char* person::lastName() const
{
return _lastName;
}
person::~person()
{
dispose();
}
person::person( const char* const firstName,const char* const lastName )
:_firstName(alloc(firstName))
,_lastName(alloc(lastName))
{
}
person::person( const person& l ) :_firstName(alloc(l._firstName))
,_lastName(alloc(l._lastName))
{
}
char* person::alloc( const char* const str )
{
if(str)
{
size_t len=strlen(str)*sizeof(char)+1;
char* buffer=new char[len];
strcpy(buffer,str);
return buffer;
}
else return 0;
}
person& person::operator=( const person& l )
{
if(this!=&l)
{
dispose();
_firstName=alloc(l._firstName);
_lastName=alloc(l._lastName);
}
return *this;
}
void person::dispose()
{
if(_firstName)
{
delete[] _firstName;
}
if(_lastName)
{
delete[] _lastName;
}
}
#pragma once
#include "person.h"
class student : public person
{
public:
student(const char* const firstName=0, const char* const lastName=0,int rate=0);
int rate() const;
private:
int _rate;
};
#include "student.h"
student::student( const char* const firstName, const char* const lastName,int rate/*=0*/ )
:person(firstName,lastName)
,_rate(rate)
{
}
inline int student::rate() const
{
return _rate;
}
#include <limits>
#include <cstdlib>
#include <iostream>
#include "student.h"
using namespace std;
int main(int argc, char *argv[])
{
int studCount;
const size_t bufSize=25;
char* firstName = new char[bufSize];
char* lastName = new char[bufSize];
cout<<"Students count: ";
cin>>studCount;
cin.ignore(numeric_limits<streamsize>::max(),'\n');
student* students = new student[studCount];
for(int i = 0; i < studCount; i++) {
cout<<"Input "<<i+1<<" Firstname: ";
cin.get(firstName,bufSize);
cin.ignore(numeric_limits<streamsize>::max(),'\n');
cout<<"Input "<<i+1<<" Lastname: ";
cin.get(lastName,bufSize);
cin.ignore(numeric_limits<streamsize>::max(),'\n');
cout<<endl;
students[i]=student(firstName,lastName);
}
delete[] firstName;
delete[] lastName;
for(int i=0;i<studCount;++i)
{
cout<<students[i].firstName()<<' '<<students[i].lastName()<<endl;
}
delete[] students;
system("PAUSE");
return EXIT_SUCCESS;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.