Untitled
unknown
plain_text
3 years ago
2.0 kB
14
Indexable
#pragma once
#include "identity_document.h"
#include <iostream>
#include <string>
#include <ctime>
using namespace std::string_view_literals;
class Passport {
public:
operator IdentityDocument()
{
return IdentityDocument();
}
Passport()
: expiration_date_(GetExpirationDate())
{
((IdentityDocument*)this)->vMethod = (void (IdentityDocument::*)()const)&Passport::PrintID;
((IdentityDocument*)this)->vdel = (void (IdentityDocument::*)())&Passport::Delete;
std::cout << "Passport::Ctor()"sv << std::endl;
}
Passport(const Passport& other)
: expiration_date_(other.expiration_date_)
{
IdentityDocument id(reinterpret_cast<const IdentityDocument&>(other));
((IdentityDocument*)this)->vMethod = (void (IdentityDocument::*)()const)&Passport::PrintID;
((IdentityDocument*)this)->vdel = (void (IdentityDocument::*)())&Passport::Delete;
std::cout << "Passport::CCtor()"sv << std::endl;
}
~Passport() {
std::cout << "Passport::Dtor()"sv << std::endl;
}
void PrintID() const {
std::cout << "Passport::PrintID() : "sv << ((IdentityDocument*)this)->GetID();
std::cout << " expiration date : "sv << expiration_date_.tm_mday << "/"sv << expiration_date_.tm_mon << "/"sv
<< expiration_date_.tm_year + 1900 << std::endl;
}
void PrintVisa(const std::string& country) const {
std::cout << "Passport::PrintVisa("sv << country << ") : "sv << ((IdentityDocument*)this)->GetID() << std::endl;
}
void PrintUniqueIDCount() {
((IdentityDocument*)this)->PrintUniqueIDCount();
}
void Delete()
{
delete this;
}
private:
const struct tm expiration_date_;
tm GetExpirationDate() {
time_t t = time(nullptr);
tm exp_date = *localtime(&t);
exp_date.tm_year += 10;
mktime(&exp_date);
return exp_date;
}
};Editor is loading...