13章 类继承练习

P533 第四题

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();
	Port &operator=(const Port &p);
	Port &operator+=(int b);
	Port &operator-=(int b);
	int BottleCount();
	virtual void show();
	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();
	friend ostream &operator<<(ostream &os,const VintagePort &vp);
};

port.cpp

#include"Port.h"
#include<iostream>
#include<cstring>
using namespace std;
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()
{
	delete []brand;
}
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=bottles+b;
	return *this;
}
Port &Port::operator-=(int b)
{
	bottles=bottles-b;
	return *this;
}
int Port::BottleCount()
{
	return bottles;
}
void Port::show()
{
	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<<endl;  //友元要使用p.brand 来访问私有成员变量
	return os;
}

VintagePort::VintagePort()
{
}
VintagePort::VintagePort(const char *br,int b,const char *nn,int y):Port(br,"VintagePort",b)
{
	nickname=new char[strlen(nn)+1];
	strcpy(nickname,nn);
	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()
{
	delete[]nickname;
}
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()
{
	Port::show();
	cout<<"Nickname:"<<nickname<<endl;
	cout<<"Year:"<<year<<endl;
}
ostream &operator<<(ostream &os,const VintagePort &vp)
{
	os<<(const Port &)vp;
	os<<vp.nickname<<","<<vp.year<<endl;  //友元要使用p.brand 来访问私有成员变量
	return os;
}

useport.cpp

#include<iostream>
#include"Port.h"
using namespace std;
int main()
{
	Port p("Gallo","tawny",20);
	VintagePort vp("JALL",30,"Old Velet",1950);
	cout<<p<<endl;
	cout<<vp<<endl;
	Port p1=p;
	p1.show();
	cout<<endl;
	VintagePort vp1=vp;
	vp1.show();
	cout<<endl;
	VintagePort vp2(vp);
	vp2.show();
	vp+=(10);
	cout<<vp;
	cout<<"11111111111111111"<<endl;
	Port*	p_port;
	p_port = &p1;
	p_port->show();
	cout << endl;
	p_port = &vp;
	p_port->show();
	cout << endl;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值