#pragma once
#ifndef PORT_H_
#define PORT_H_
#include <iostream>
using namespace std;
class Port
{
private:
char *brand;
char style[20];
int bottles;
public:
Port(const char *br = "none", const char *st = "none", int b = 0);
Port(const Port &p);
virtual ~Port() { delete[] brand; }
Port &operator=(const Port &p);
Port &operator+=(int b);
Port &operator-=(int b);
int BottleCount() const { return bottles; }
virtual void Show() const;
friend ostream &operator<<(ostream &os, const Port &p);
};
class VintagePort :public Port
{
private:
char *nickname;
int year;
public:
VintagePort();
VintagePort(const char *br, int b, const char *nn, int y);
VintagePort(const VintagePort &vp);
~VintagePort();
VintagePort &operator=(const VintagePort &vp);
void Show() const;
friend ostream &operator<<(ostream &os, const VintagePort &vp);
};
#endif // !PORT_H_
#include "Port.h"
#pragma warning( disable : 4996)
Port::Port(const char * br, const char * st, int b)
{
brand = new char[strlen(br) + 1];
strcpy(brand, br);
strcpy(style, st);
bottles = b;
}
Port::Port(const Port & p)
{
brand = new char[strlen(p.brand) + 1];
strcpy(brand, p.brand);
strcpy(style, p.style);
bottles = p.bottles;
}
Port & Port::operator=(const Port & p)
{
delete[] brand;
brand = new char[strlen(p.brand) + 1];
strcpy(brand, p.brand);
strcpy(style, p.style);
bottles = p.bottles;
return *this;
// TODO: 在此处插入 return 语句
}
Port & Port::operator+=(int b)
{
bottles += b;
return *this;
// TODO: 在此处插入 return 语句
}
Port & Port::operator-=(int b)
{
bottles -= b;
return *this;
// TODO: 在此处插入 return 语句
}
void Port::Show() const
{
cout << "Brand : " << brand << "\n";
cout << "Kind : " << style << "\n";
cout << "Bottles : " << bottles << "\n";
}
ostream & operator<<(ostream & os, const Port & p)
{
os << p.brand << "," << p.style << "," << p.bottles;
return os;
// TODO: 在此处插入 return 语句
}
ostream & operator<<(ostream & os, const VintagePort & vp)
{
os << "nickname = " << vp.nickname << " year = " << vp.year << endl;
return os;
// TODO: 在此处插入 return 语句
}
VintagePort::VintagePort()
{
}
VintagePort::VintagePort(const char * br, int b, const char * nn, int y):Port(br,"",b)
{
nickname = new char[strlen(nn) + 1];
strcpy(nickname, nn);
year = y;
}
VintagePort::VintagePort(const VintagePort & vp)
{
nickname = new char[strlen(vp.nickname) + 1];
strcpy(nickname, vp.nickname);
year = vp.year;
}
VintagePort::~VintagePort()
{
delete [] nickname;
}
VintagePort & VintagePort::operator=(const VintagePort & vp)
{
delete[] nickname;
nickname = new char[strlen(vp.nickname) + 1];
strcpy(nickname, vp.nickname);
year = vp.year;
return *this;
// TODO: 在此处插入 return 语句
}
void VintagePort::Show() const
{
Port::Show();
cout << "nickname = " << nickname << " year = " << year << endl;
}
test:
Port p1("Gallo", "Tawny", 20);
p1.Show();
Port p2 = p1;
p2.Show();
p1 += 10;
p1.Show();
VintagePort vp1("Gallo", 20, "grapes", 1999);
vp1.Show();
VintagePort vp2 = vp1;
cout << "vp2::" << vp2 << endl;```