头文件
#pragma once
#ifndef _WINE_H_
#define _WINE_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() { 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, const char* st,int b, const char* nn, int y);
VintagePort(const VintagePort& vp);
~VintagePort() { delete[] nickname; };
VintagePort& operator=(const VintagePort& vp);
virtual void Show()const;
friend ostream& operator<<(ostream& os, const VintagePort& p);
};
#endif
头文件中相关方法的定义:
#define _CRT_SECURE_NO_WARNINGS
#include"wine.h"
#include<string.h>
//class Port 方法的定义
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) {
strcpy(brand, p.brand);
strcpy(style, p.style);
bottles = p.bottles;
return *this;
}
Port& Port::operator+=(int b) {
bottles += b;
return *this;
}
Port& Port::operator-=(int b) {
if (b <= bottles)
bottles -= b;
else {
cout << "要取出的瓶数超出已有的瓶数,该操作取消!" << endl;
}
return *this;
}
void Port::Show()const {
cout << "Brand:" << brand << endl;
cout << "Kind:" << style << endl;
cout << "Bottles:" << bottles << endl;
}
ostream& operator<<(ostream& os, const Port& p) {
cout << p.brand << "," << p.style << "," << p.bottles;
return os;
}
//class VintagePort方法的定义
VintagePort::VintagePort():Port() {
nickname = new char[5];
strcpy(nickname, "none");
year = 0;
}
VintagePort::VintagePort(const char* br, const char* st, int b, const char* nn, int y):Port(br,st,b) {
delete[] nickname;
nickname = new char[strlen(nn) + 1];
strcpy(nickname, nn);
year = y;
}
VintagePort::VintagePort(const VintagePort& vp):Port(vp) {
delete[] nickname;
nickname = new char[strlen(vp.nickname) + 1];
strcpy(nickname, vp.nickname);
year = vp.year;
}
VintagePort& VintagePort::operator=(const VintagePort& vp) {
Port::operator=(vp);
delete[] nickname;
strcpy(nickname,vp.nickname);
year = vp.year;
return *this;
}
void VintagePort::Show()const {
Port::Show();
cout << "Noble:" << nickname << endl;
cout << "year:" << year << endl;
}
ostream& operator<<(ostream& os, const VintagePort& p) {
cout << (Port&)p;
cout << "," << p.nickname << "," << p.year;
return os;
}
相关的测试主文件:
#include"wine.h"
int main() {
Port p1("Gallo","tawny",200 );
p1.Show();
printf("\n");
int b = 10;
p1 += b;
p1.Show();
printf("\n");
p1 -= b;
cout << p1 << endl;
printf("\n");
VintagePort p2 = { "Jolly","King",900,"Big",2000 };
p2.Show();
printf("\n");
p2 += b;
cout << p2 << endl;
p2.~VintagePort();
return 0;
}
程序的运行结果: