实验4继承
Car.hpp
#pragma once #include<iostream> #include<string> using namespace std; class Car { private: string maker; string model; int year; int odometers; public: Car(string maker,string model,int year); void info(); void update_odometers(int a); };
Battery.hpp
#pragma once #include<iostream> using namespace std; class Battery { private: int capacity; public: Battery(int _capacity=70); int get_capacity(); };
ElectricCar.cpp
#include"ElectricCar.hpp" Battery::Battery(int _capacity):capacity(_capacity){} int Battery::get_capacity(){ return capacity; } Car::Car(string _maker,string _model,int _year):maker(_maker),model(_model),year(_year),odometers(0){ } void Car::info() { cout<<"maker: "<<maker<<endl; cout<<"model: "<<model<<endl; cout<<"year: "<<year<<endl; cout<<"odometer:"<<odometers<<endl; } void Car::update_odometers(int a) { if(odometers<=a) { odometers=a; } else cout<<"wrong odometers\n"; } ElectricCar::ElectricCar(string _maker,string _model,int _year,int _capacity):Car(_maker,_model,_year),battery(_capacity){ } void ElectricCar::info() { Car::info(); cout<<"capacity:"<<battery.get_capacity()<<" kWh"<<endl; }
ElectricCar.hpp
#pragma once #include"Car.hpp" #include"Battery.hpp" #include<iostream> using namespace std; class ElectricCar:public Car { private: Battery battery; public: ElectricCar(string maker,string model,int year,int capacity=70); void info(); };
task3.cpp
#include <iostream> #include "ElectricCar.hpp" int main() { using namespace std; // test class of Car Car oldcar("Audi", "a4", 2016); cout << "--------oldcar's info--------" << endl; oldcar.update_odometers(25000); oldcar.info(); cout << endl; // test class of ElectricCar ElectricCar newcar("Tesla", "model s", 2016); newcar.update_odometers(2500); cout << "\n--------newcar's info--------\n"; newcar.info(); }
Ps:ElectricCar.cpp是实现文件,头文件中只声明函数,在实现文件中定义
TASK4
pets.hpp
#include<iostream> #include<string> using namespace std; class MachinePets { private: string nickname; public: MachinePets(const string s) { nickname=s; } string get_nickname() { return nickname; } virtual string talk() { return " "; } }; class PetCats:public MachinePets { public: PetCats(const string s):MachinePets(s) { } string talk() { return "maio wu~"; } }; class PetDogs:public MachinePets { public: PetDogs(const string s):MachinePets(s) {} string talk() { return " wang wang~"; } };
task4
#include <iostream> #include "pets.hpp" void play(MachinePets *ptr) { std::cout << ptr->get_nickname() << " says " << ptr->talk() << std::endl; } int main() { PetCats cat("miku"); PetDogs dog("da huang"); play(&cat); play(&dog); }