201983290531 唐乾凯 面向对象程序设计实验4

task2运行结果为:

 总结:

(1)同名覆盖原则:子类和父类的名字必须相同,不然不叫覆盖。如果覆盖类容不报错,说明已经实现。方法的覆盖,这时子类和父类的名字必须相同。

(2)二元作用域在不同的地方有不同的含义,如果成员函数中定义了类与域中的变量同名的变量,则类域中的变量被块作用域中的变量隐藏。这时可以在变量名前加类名和作用域运算符访问这种隐藏变量。

(3)类型兼容原则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。

 

 加了virtual后RTTI type发生了改变。

task3.

Battery.h

#ifndef BATTERY_HPP
#define BATTERY_HPP
#include<iostream>
using namespace std;
class Battery{
	private:
		int capacity;
	public:
		~Battery()
		{
			
		}
		Battery()
		{
			capacity=70;
		}
		int get_capacity()
		{
			return capacity;
		}
};
#endif

  Car.h

#ifndef CAR_HPP
#define CAR_HPP
#include<iostream>
using namespace std;
class Car
{
	public:
		string maker;
		string model;
		int year;
		int odometers;
		~Car()
		{
			
		}
		Car(string car_maker,string car_model,int car_year)
		{
			maker=car_maker;
			model=car_model;
			year=car_year;
			odometers=0;
		}
		void info()
		{
			cout<<"car-information-list"<<endl;
			cout<<"maker:     "<<maker<<endl;
			cout<<"model:     "<<model<<endl;
			cout<<"year:      "<<year<<endl;
			cout<<"odometers: "<<odometers<<endl;
		}
		void update_odometers(int n)
		{
			if(n<odometers)
			{
				cout<<"data error\n";
			}
			else
			{
				odometers=n;
			}
		}
};
#endif 

  Electric.h

#ifndef ELECTRICCAR
#define ELECTRICCAR
#include<iostream>
#include "Car.h"
#include "Battery.h"
using namespace std;
class ElectricCar:public Car 
{
	private:
		Battery battery;
	public:
		~ElectricCar()
		{
			
		}
		ElectricCar(string car_maker,string car_model,int car_year):Car(car_maker,car_model,car_year)
		{
			maker=car_maker;
			model=car_model;
			year=car_year;
			odometers=0;
		}
		void info()
		{
			cout<<"car-information-list"<<endl;
			cout<<"maker:     "<<maker<<endl;
			cout<<"model:     "<<model<<endl;
			cout<<"year:      "<<year<<endl;
			cout<<"odometers: "<<odometers<<endl;
			cout<<"capacity:  "<<battery.get_capacity()<<endl;
		}
};
#endif 

  运行结果为:

 

 

pet.h

#ifndef PET_HPP
#define PET_HPP
#include<iostream>
using namespace std;
class MachinePets
{
	protected:
		string nickname;
	public:
		~MachinePets()
		{
		}
		MachinePets(const string s)
		{
			nickname = s;	
		}
		virtual string talk()
		{
			string s;
			s="zizi~";
			return s;
		}
		string get_nickname()
		{
			return nickname;
		}
};
class PetCats:public MachinePets{
	public:
		~PetCats()
		{
			
		}
		PetCats(string s):MachinePets(s)
		{
			nickname=s;
		}
		string talk()
		{
			string s;
			s="miao wu~";
			return s;
		}
};
class PetDogs:public MachinePets{
	public:
		~PetDogs()
		{
			
		}
		PetDogs(string s):MachinePets(s)
		{
			nickname=s;
		}
		string talk()
		{
			string s;
			s="wang wang~";
			return s;
		}
};

#endif

  运行结果为:

 

posted @ 2021-12-01 23:35  不知名摸鱼选手  阅读(29)  评论(1编辑  收藏  举报