实验四 继承

  • 实验任务二
  • 实验四  继承task2.cpp
  • 实验四  继承
  • 实验四  继承task2.cpp(虚函数)
  • 实验四  继承
  • 总结:

    1.同名覆盖原则

    派生类与基类中有相同成员时:
    若未强行指名,则通过派生类对象使用的是派生类的同名成员;

    2. 二元作用域分辨符

    如果成员函数中定义了和类域中的变量同名的变量,则类域中的变量被块作用域中的变量隐藏。这时可以在变量名前面加类名和作用域运算符(::)访问这种隐藏变量。

    3.类型兼容原则

    在需要基类对象的任何地方,都可以使用公有派生类的对象来替代,编译器会隐式地执行派生类到基类的转换。
    存在三种转换:
    ->>派生类的对象可以隐含转换为基类对象。
    ->>派生类的对象可以初始化基类的引用。
    ->>派生类的指针可以隐含转换为基类的指针。

  • 实验任务三
  • 实验四  继承
     1 #ifndef CAR_HPP
     2 #define CAR_HPP
     3 #include <iostream>
     4 #include <string>
     5 
     6 using namespace std;
     7 
     8 class Car
     9 {
    10 public:
    11     Car(string maker0,string model0,int year0,int odometers0=0):maker(maker0),model(model0),year(year0),odometers(odometers0){ };
    12     void info()const;
    13     void update_odometers(int new_odometers);
    14 private:
    15     string maker,model;
    16     int year,odometers;
    17 };
    18 void Car::info()const
    19 {
    20     cout << "maker:\t\t" << maker <<endl;
    21     cout << "model:\t\t" << model <<endl;
    22     cout << "year:\t\t" << year <<endl;
    23     cout << "odometers:\t" << odometers <<endl;
    24 }
    25 void Car::update_odometers(int new_odometers)
    26 {
    27     if(new_odometers<odometers)
    28         cout << "数据错误,请重新输入" << endl;
    29     odometers=new_odometers;
    30 }
    31 #endif // CAR_HPP
    Car.hpp
  • 实验四  继承
     1 #ifndef BATTERY_HPP
     2 #define BATTERY_HPP
     3 #include<iostream>
     4 
     5 using namespace std;
     6 
     7 class Battery
     8 {
     9 public:
    10     Battery(int capacity0 = 70):capacity{capacity0} {};
    11     int get_capacity() {return capacity;}
    12 private:
    13     int capacity;
    14 };
    15 
    16 #endif // BATTERY_HPP
    Battery.hpp
  • 实验四  继承
     1 #ifndef ElECTRIC_CAR_HPP
     2 #define ElECTRIC_CAR_HPP
     3 #include "Car.hpp"
     4 #include "Battery.hpp"
     5 #include <iostream>
     6 #include <string>
     7 
     8 using namespace std;
     9 
    10 class ElectricCar:public Car
    11 {
    12 public:
    13     ElectricCar(string maker0,string model0,int year0,int odometers0=0,int capacity0=70):Car(maker0,model0,year0,odometers0),battery(capacity0) {};
    14     void info() ;
    15 private:
    16     Battery battery;
    17 };
    18 void ElectricCar:: info()
    19 {
    20     Car::info();
    21     cout << "capacity:\t" << battery.get_capacity() << endl;
    22 }
    23 #endif // ElECTRIC_CAR_HPP
    EletricCar.hpp
  • 实验四  继承
     1 #include <iostream>
     2 #include "electricCar.hpp"
     3 int main()
     4 {
     5     using namespace std;
     6     // test class of Car
     7     Car oldcar("Audi", "a4", 2016);
     8     cout << "--------oldcar's info--------" << endl;
     9     oldcar.update_odometers(25000);
    10     oldcar.info();
    11     cout << endl; // test class of ElectricCar
    12     ElectricCar newcar("Tesla", "model s", 2016);
    13     newcar.update_odometers(2500);
    14     cout << "\n--------newcar's info--------\n";
    15     newcar.info();
    16 }
    main.hpp

    实验四  继承

     

     

  • 实验任务四
  • 实验四  继承
     1 #ifndef PETS_HPP
     2 #define PETS_HPP
     3 #include <iostream>
     4 #include <string>
     5 using namespace std;
     6 
     7 class MachinePets
     8 {
     9 public:
    10     MachinePets(const string s):nickname(s){ }
    11     virtual string talk() {return "a~";}
    12     string get_nickname() const {return nickname;}
    13 private:
    14     string nickname;
    15 };
    16 
    17 class PetCats:public MachinePets
    18 {
    19 public:
    20     PetCats(const string s):MachinePets(s) { }
    21     string talk() {return "miao wu~";}
    22 };
    23 
    24 class PetDogs:public MachinePets
    25 {
    26 public:
    27     PetDogs(const string s):MachinePets(s) { }
    28     string talk() {return "wang wang~";}
    29 };
    30 #endif // PETS_HPP
    Pets.hpp
  • 实验四  继承
     1 #include <iostream>
     2 #include "pets.hpp"
     3 
     4 void play(MachinePets *ptr)
     5 {
     6     std::cout << ptr->get_nickname() << " says " << ptr->talk() << std::endl;
     7 }
     8 int main()
     9 {
    10     PetCats cat("miku");
    11     PetDogs dog("da huang");
    12     play(&cat);
    13     play(&dog);
    14 }
    main.hpp
  • 实验四  继承

     

     

 

 

实验四  继承

 

上一篇:【 总结 】继承


下一篇:浅谈工厂模式