实验四---继承与派生练习以及运算符[ ]重载练习
生活随笔
收集整理的這篇文章主要介紹了
实验四---继承与派生练习以及运算符[ ]重载练习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 車輛基本信息管理 問題場景描述如下: 為了對車量基本信息進行管理,對現實世界車量基本信息抽象后,抽象出Car類、ElectricCar類、Battery類, 它們之間的關系描述如下:基于Car類派生出ElectricCar類,派生類ElectricCar中新增數據成員為Battery類 對象。
/*代碼如下*/
#ifndef BATTERY_H #define BATTERY_Hclass battery {private:int batterysize;public:battery(int bs0=70):batterysize(bs0){}void get_batterysize();};#endif // !BATTERY_H battery.h #include"battery.h" #include<iostream> using namespace std; void battery::get_batterysize() {cout << batterysize << "-KWH"; } battery.cpp #ifndef CAR_H #define CAR_H #include<string> using namespace std; class car {private:string maker;string model;int year;double odometer;double sum_meters = 100000.0;public:car(string maker0, string model0, int year0, double odometer0 = 0.0) :maker(maker0), model(model0), year(year0), odometer(odometer0) {}car(){}friend ostream & operator<<(ostream &out, const car &c);//重載<<運算符。void update_odometer(double meters);//更新行車總里程數。 };#endif // !CAR_H car.h #include"car.h" #include<iostream> #include<string> using namespace std; void car::update_odometer(double meters) {double odometer1 = odometer;odometer1 += meters;if (odometer > odometer1){cout << "WARNING,更新數據失敗" << endl;}else odometer = odometer1;}ostream & operator<<(ostream &out,const car &c) //重載實現 {cout << "汽車制造商:" << c.maker << endl<< "汽車型號:" << c.model << endl<< "生產年份:" << c.year << endl<< "總里程數:" << c.odometer << "km" << endl;return out;} car.cpp #ifndef ELECTRICCAR_H #define ELECTRICCAR_H #include"car.h" #include"battery.h" #include<iostream> #include<string> using namespace std;class electricCar :private car, private battery {private:battery b;//新增成員public:electricCar(string maker0, string model0, int year0, double odometer0 = 0.0, battery b0 = 70) :b(b0), car(maker0, model0, year0, odometer0) {}friend ostream & operator<<(ostream &out, electricCar &e);//<<重載聲明void update_odometer(double meters);//里程數更新 };#endif // !ELECTRICCAR_H electricCar.h #include"electricCar.h" #include<iostream> #include<string> using namespace std; void electricCar::update_odometer(double meters) {car::update_odometer(meters);//調用派生類的成員函數 }ostream & operator<<(ostream &out, electricCar &e) {//<<重載實現out << (const car &)e;//調用基類中的友元函數.cout << "剩余能量:";e.b.get_batterysize();return out;} electricCar.cpp #include <iostream> #include<string> using namespace std; #include "car.h" #include "electricCar.h" #include <stdlib.h> int main() {// 測試Car類car oldcar("Audi", "a4", 2016);cout << "--------oldcar's info--------" << endl;oldcar.update_odometer(25000);cout << oldcar << endl;// 測試ElectricCar類electricCar newcar("Tesla", "model s", 2016);cout << "\n--------newcar's info--------\n";newcar.update_odometer(2500);cout << newcar << endl;system("pause");return 0;} main.cpp2、重載運算符[]為一維動態整形數組類ArrayInt的成員函數,使得通過動態整形數組對象名和下標可以 訪問對象中具體元素。?
/*代碼如下*/
#ifndef ARRAYINT_H #define ARRAYINT_H class ArrayInt {public:ArrayInt(int n, int value=0);~ArrayInt();// 補足:將運算符[]重載為成員函數的聲明int& operator[](int i);void print();private:int *p;int size;};#endif // ARRAYINT_H arrayint.h #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 == nullptr) {//關于null、nullptr的使用另附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];} arrayint.cpp #include <iostream> using namespace std; #include "arrayInt.h" #include<stdlib.h> int main() {// 定義動態整型數組對象a,包含2個元素,初始值為0ArrayInt a(2);a.print();// 定義動態整型數組對象b,包含3個元素,初始值為6ArrayInt b(3, 6);b.print();// 通過對象名和下標方式訪問并修改對象元素b[0] = 2;cout << b[0] << endl;b.print();system("pause");return 0;} main.cpp?????是我的codeblocks版本太老了嗎,好像不支持這個標準
其他的IDE就可以運行
?二:實驗總結與體會
1.怎樣在派生類中引用基類的友元函數卡了,查資料得知。
2.派生類和重載不熟練,常常需要翻書。。
3.關于那個nullptr的問題
https://www.cnblogs.com/yutongqing/p/6508327.html
似乎在這里能找到一些頭緒。
???????????????????????????? ----X.Raven
轉載于:https://www.cnblogs.com/laboratory-X/p/10896615.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的实验四---继承与派生练习以及运算符[ ]重载练习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创建一个CentOS 7的模板
- 下一篇: .git文件解读