面向对象程序设计(C++)_实验5_类的继承、派生和多态(2)
实验结论
Part1 验证性实验(1)
- 通过对象名.成员名的方式,访问的是派生类中新增的同名成员。
- 在基类中成员函数无关键字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游戏补足与丰富(选做*)
- #ifndef _CONTAINER
- numOfHeal--;
- bag.set(bag.nOfHeal() + p.bag.nOfHeal(), bag.nOfMW() + p.bag.nOfMW());
- void showinfo(player& p1, player& p2)
- public player
- delete human;
- delete human;
实验总结与体会
1. 一方面,设计和使用虚函数允许我们可以通过基类指针访问派生类成员;另一方面,这种实现方式可以更好地表现现实世界中概念的层次结构。
2. part4选做部分补完的程序我根本就没有运行ʅ(´◔౪◔)ʃ
posted on 2019-06-02 22:07 Alexander_Yang 阅读(320) 评论(0) 编辑 收藏 举报