12.4

//vitageport.h
#ifndef VINTAGEPORT_H
#define VINTAGEPORT_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(){delete[] nickname;}
	VintagePort& operator=(const VintagePort &vp);
	void Show()const;
	friend ostream &operator<<(ostream &os,const VintagePort &vp);
};

#endif
//vintageport.cpp
#include"vintageport.h"



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)
{
	if(this ==&p)
		return *this;
	delete[]brand;
    brand=new char[strlen(p.brand)+1];
	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)
{
	bottles-=b;
	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)
{
	os<<p.brand<<","<<p.style<<","<<p.bottles;
	return os;
}



VintagePort::VintagePort():Port()
{
	nickname= new char[3];
	nickname[0]='\0';
	year=0;
}
VintagePort::VintagePort(const char *br, int b,const char* nm, int y):Port(br,"vintage",b)
{
	nickname=new char[strlen(nm)+1];
	strcpy(nickname,nm);
	year= y;
}
VintagePort::VintagePort(const VintagePort &vp):Port(vp)
{
	nickname=new char[strlen(vp.nickname)+1];
	strcpy(nickname,vp.nickname);
	year= vp.year;
}
VintagePort& VintagePort::operator=(const VintagePort &vp)
{
	if(this ==&vp)
		return *this;
	Port::operator=(vp);
	delete[] nickname;
	nickname=new char[strlen(vp.nickname)+1];
	strcpy(nickname,vp.nickname);
	year= vp.year;
	return *this;
}
void VintagePort::Show()const
{
	Port::Show();
	cout<<"nickname: "<<nickname<<endl;
	cout<<"year:  "<<year<<endl;
}
ostream & operator <<(ostream &os,const VintagePort &vp)
{
	os<<(Port &)vp<<",";
	os<<vp.nickname<<","<<vp.year;
	return os;
}

//main.cpp
#include"vintageport.h"



int main()
{
	Port p0("Gallo","tawny",20);
	p0.Show();
	p0+=2;
	p0-=4;
	cout<<p0<<endl;
	Port *p1;
	p1=new VintagePort("Gallo",20,"Noble",20);
	*p1+=8;
	p1->Show();
	cout<<*p1<<endl;
	p1=&p0;
	p1->Show();
	cout<<*p1<<endl;
	VintagePort p2("Gallo",20,"Noble",20);
	p2+=6;
	p2.Show();
	cout<<p2;
	system("pause");

	return 0;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值