c++ 子类虚函数、友元函数、复构、构造、赋值=的重写方式 - 练习题

来源:互联网 发布:xy苹果助手for mac版 编辑:程序博客网 时间:2024/05/17 17:43
#include <iostream>#include <cstring>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){brand = new char[strlen(br)+1];strcpy(brand,br);strcpy(style,st);bottles = b;}Port(const Port&p){brand = new char[strlen(p.brand)+1];strcpy(brand, p.brand);strcpy(style, p.style);bottles = p.bottles;}virtual ~Port(){delete[] brand;}Port& operator=(const Port&p){if(&p==this)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& operator+=(int b){bottles += b;return *this;}Port& operator-=(int b){bottles -= b;bottles = bottles>0?bottles:0;return *this;}int BottleConut() const{return bottles;}virtual void show() const{cout<<"Brand: "<<brand<<endl<<"Kind: "<<style<<endl<<"Bottles: "<<bottles<<endl;}friend ostream& operator<<(ostream&os, const Port&p){os<<p.brand<<", "<<p.style<<", "<<p.bottles;return os;}};class VintagePort: public Port{private:char* nickname;int year;public:VintagePort():Port("none","vintage",0),year(0) //可使用初始化列表{nickname = new char[strlen("none")+1];strcpy(nickname, "none");}VintagePort(const char* br, int b, const char *nn, int y){Port::Port(br,"vintage",b); // 构造函数的重写方式nickname = new char[strlen(nn)+1];strcpy(nickname, nn);year = y;}VintagePort(const VintagePort& vp):Port(vp){nickname = new char[strlen(vp.nickname)+1];strcpy(nickname, vp.nickname);year = vp.year;}~VintagePort(){delete[] nickname;}VintagePort& operator=(const VintagePort&vp){if(&vp==this)return *this;delete[] nickname;Port::operator=(vp); // 赋值=的重写方式nickname = new char[strlen(vp.nickname)+1];strcpy(nickname, vp.nickname);year = vp.year;return *this;}virtual void show() const{Port::show(); // 虚函数重写,需要调用基本虚函数时cout<<"Nickname: "<<nickname<<endl<<"Year: "<<year<<endl;}friend ostream& operator<<(ostream&os, const VintagePort&vp){os<<(const Port&)vp; // 友元函数的重写方式os<<", "<<vp.nickname<<", "<<vp.year;return os;}};

0 0
原创粉丝点击