1. 车辆基本信息管理 问题场景描述如下: 为了对车量基本信息进行管理,对现实世界车量基本信息 抽象后,抽象出Car类、ElectricCar类、Battery类, 它们之间的关系描述如下:基于Car类派生出ElectricCar类,派生类ElectricCar中新增数据成员为Battery类 对象。
#include <iostream> #include "battery.h" #include <string> #include "car.h" #include "electricCar.h" using namespace std; int main() { battery s; // 测试Car类 car oldcar("Audi","a4",2016); cout << "--------oldcar‘s info--------" << endl; oldcar.updateOdometer(25000); cout << oldcar << endl; oldcar.updateOdometer(0); cout << oldcar << endl; // 测试ElectricCar类 electricCar newcar("Tesla","model s",2016); newcar.updateOdometer(2500); cout << "\n--------newcar‘s info--------\n"; cout << newcar << endl; return 0; }
#ifndef BETTERY_H #define BETTERY_H class battery{ public: battery(int size0=70); int batterySlze; }; #endif
#include "battery.h" #include <iostream> using namespace std; battery::battery(int size0):batterySlze(size0){ }
#ifndef CAR_H #define CAR_H #include <string> #include <iostream> using namespace std; class car{ public: car(string maker0,string model0,int year,int odometer0=0); friend ostream &operator<<(ostream &out,car &ca); void updateOdometer(int newodometer); string maker; string model; int year; int odometer; }; #endif
#include "car.h" #include <string> #include <iostream> using namespace std; car::car(string maker0,string model0,int year0,int odometer0):maker(maker0),model(model0),year(year0),odometer(odometer0){ } ostream &operator<<(ostream &out,car &ca){ out<<"maker:"<<ca.maker<<endl <<"model:"<<ca.model<<endl <<"year:"<<ca.year<<endl <<"odometer:"<<ca.odometer<<endl; return out; } void car::updateOdometer(int newodometer){ if(newodometer<=odometer) { int n; cout<<"It is wrong.Input again ,please:";cin>>n; odometer=n; } else odometer=newodometer; }
#ifndef ELECTRICCAR_H #define ELECTRICCAR_H #include "car.h" #include "battery.h" #include <string> #include <iostream> using namespace std; class electricCar:public car,public battery{ public: electricCar(string maker0,string model0,int year,int odometer0=0); friend ostream &operator<<(ostream &out,electricCar &ca); private: battery batt; }; #endif
#include "electricCar.h" #include <string> #include <iostream> using namespace std; electricCar::electricCar(string maker0,string model0,int year0,int odometer0):car(maker0,model0,year,odometer0){ } ostream &operator<<(ostream &out,electricCar &ca){ out<<"maker:"<<ca.maker<<endl <<"model:"<<ca.model<<endl <<"year:"<<ca.year<<endl <<"odometer:"<<ca.odometer<<endl; out<<"batterySize:"<<ca.batt.batterySlze<<"-kWh"<<endl; return out; }
2.补足程序,重载运算符[]为一维动态整形数组类ArrayInt的成员函数,使得通过动态整形数组对象名和下标可以 访问对象中具体元素。
#include <iostream> using namespace std; #include "arrayInt.h" int main() { // 定义动态整型数组对象a,包含2个元素,初始值为0 ArrayInt a(2); a.print(); // 定义动态整型数组对象b,包含3个元素,初始值为6 ArrayInt b(3, 6); b.print(); // 通过对象名和下标方式访问并修改对象元素 b[0] = 2; cout << b[0] << endl; b.print(); return 0; }
#ifndef ARRAY_INT_H #define ARRAY_INT_H class ArrayInt{ public: ArrayInt(int n, int value=0); ~ArrayInt(); int &operator[](int i); // 补足:将运算符[]重载为成员函数的声明 // ××× void print(); private: int *p; int size; }; #endif
#include "arrayInt.h" #include <iostream> #include <cstdlib> using std::cout; using std::endl; ArrayInt::ArrayInt(int n, int value): size(n) { p = new int[size]; if (p == NULL) { cout << "fail to mallocate memory" << endl; exit(0); } for(int i=0; i<size; i++) p[i] = value; } ArrayInt::~ArrayInt() { delete[] p; } void ArrayInt::print() { for(int i=0; i<size; i++) cout << p[i] << " "; cout << endl; } int &ArrayInt::operator[](int i){ return p[i]; }// 补足:将运算符[]重载为成员函数的实现 // ×××
小结
原文:https://www.cnblogs.com/Ann-88/p/10889663.html