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
- c++ 子类虚函数、友元函数、复构、构造、赋值=的重写方式 - 练习题
- 【c++】友元关系和子类函数构造函数的写法
- 子类重写父类的构造函数
- [C++]子类的构造函数
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- 子类的拷贝构造函数和赋值操作符
- 子类的拷贝构造函数和赋值操作符
- 子类的构造函数
- 【C++】子类在重写虚函数时,会覆盖父类的函数
- C++:构造函数,析构函数及友元函数
- 类中构造函数、析构函数与赋值函数的重写
- C++子类的构造函数
- 【C++】拷贝构造函数和赋值函数
- C++_子类与基类的构造函数问题
- 在子类的构造函数中调用虚函数
- 2015.11.10 ,Demo7 ,构造函数 ,重载 ,子类的重写,this关键字的使用,继承
- 子类通过父类的构造函数为自己的属性字段赋值
- iOS之UITabBar 的相关属性
- 栈的C++实现
- OSI七层网络模型与TCP/IP四层网络模型
- Unexpected Exception caught setting 'house.floorage' on 'class action.HouseAction
- 第二章:在HTML中使用JavaScript
- c++ 子类虚函数、友元函数、复构、构造、赋值=的重写方式 - 练习题
- 归并排序_java实现
- 用VS2013搭建前端开发环境的心得
- 第九章:Shiro的WEB
- Linux静态库和动态库的使用
- JPA一对一关系实例配置
- JSOUP简介
- 记SDOI2016 R1
- powerdesigner逆向工程,从数据库导出PDM