//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;
}
12.4
最新推荐文章于 2024-05-20 16:34:36 发布