面向对象程序设计(C++)_实验5_类的继承、派生和多态(2)

实验结论

Part1 验证性实验(1)

  1. 通过对象名.成员名的方式,访问的是派生类中新增的同名成员。
  2. 在基类中成员函数无关键字virtual的情况下,通过基类指针访问派生类对象时,访问的是基类Base1中定义的成员函数。在基类中成员函数有关键字virtual修饰的情况下,通过基类指针访问派生类对象时,访问的则是该指针所指对象实际所属类的成员函数。

Part2 验证性实验(2)

在本实验中,抽象类shape作为三个派生类Rectangle、Circle、Triangle的共同父类,通过纯虚函数area()为整个类族提供了通用的外部接口。根据赋值兼容规则,在printArea函数中可以通过基类指针shape *p访问到p指向的派生类对象的成员。

Part3 简单编程练习

源代码:

#include <iostream>

#include <string>

using namespace std;

class MachinePets {

public:

    MachinePets(const string s) :nickname(s) {}

    string getNickname() const {

         return nickname;

    }

    virtual string talk() const = 0;

private:

    string nickname;

};

class PetCats :public MachinePets {

public:

    PetCats(const string s) :MachinePets(s) {}

    string talk() const{

         return "miao wu~";

    }

};

class PetDogs :public MachinePets {

public:

    PetDogs(const string s) :MachinePets(s) {}

    string talk() const{

         return "wang wang~";

    }

};

void play(MachinePets* p) {

    cout << p->getNickname() << " says " << p->talk() << endl;

}

int main() {

    PetCats cat("miku");   

    PetDogs dog("da huang");       

    play(&cat);

    play(&dog);

    system("pause");

    return 0;

}

运行结果:

 

Part4 应用编程实践: 简单RPG游戏补足与丰富(选做*)

  1. #ifndef _CONTAINER
  2. numOfHeal--; 
  3. bag.set(bag.nOfHeal() + p.bag.nOfHeal(), bag.nOfMW() + p.bag.nOfMW()); 
  4. void showinfo(player& p1, player& p2)
  5. public player
  6. delete human;
  7. delete human;

实验总结与体会

1. 一方面,设计和使用虚函数允许我们可以通过基类指针访问派生类成员;另一方面,这种实现方式可以更好地表现现实世界中概念的层次结构。

2. part4选做部分补完的程序我根本就没有运行ʅ(´◔౪◔)ʃ

猜你喜欢

转载自www.cnblogs.com/AlexanderYang/p/10964669.html