实验目的 1. 理解运行时多态 2. 掌握虚函数和抽象类 实验准备 1. 概念 多态,运行时多态 虚函数, 纯虚函数, 抽象类 2. 语法和应用 虚函数的定义和使用纯虚函数、抽象类的定义和使用
实验准备 1. 概念 多态,运行时多态 虚函数, 纯虚函数, 抽象类 2. 语法和应用 虚函数的定义和使用纯虚函数、抽象类的定义和使用
实验内容
设计并实现一个机器宠物类MachinePets。 每个机器宠物有如下信息:昵称(nickname) 每个机器宠物有如下成员函数: 带参数的构造函数MachinePets(const string s) ,为机器宠物初始化昵称。 纯虚函数string talk()为机器宠物派生类提供宠物叫声的统一接口。 设计并实现电子宠物猫类PetCats,该类公有继承自MachinePets。每个电子宠物猫类有如下成员函数: 带参数的构造函数PetCats(const string s),为机器宠物猫初始化昵称。 string talk(),返回电子宠物猫叫声。 设计并实现电子宠物狗类PetDogs, 该类公有继承自MachinePets。每个电子宠物狗类有如下成员函数: 带参数的构造函数PetCats(const string s),为机器宠物狗初始化昵称。 string talk(),返回电子宠物狗叫声。
1 #ifndef PET_H 2 #define PET_H 3 #include<string> 4 using namespace std; 5 class MachinePets{ 6 public: 7 MachinePets(const string s="nameless"); 8 virtual string talk()=0; 9 string getNickname(); 10 private: 11 string nickname; 12 }; 13 class PetCats:public MachinePets{ 14 public: 15 PetCats(const string s); 16 string talk(); 17 }; 18 19 class PetDogs:public MachinePets{ 20 public: 21 PetDogs(const string s); 22 string talk(); 23 }; 24 #endif // PET_H_INCLUDEDpet.h
#include <iostream> #include <string> using namespace std; #include "pet.h" #include <stdlib.h> MachinePets::MachinePets(string s/*="nameless"*/):nickname(s){} string MachinePets::getNickname(){ return nickname; } PetCats::PetCats(const string s):MachinePets(s){ } string PetCats::talk(){ return "meow~"; } PetDogs::PetDogs(const string s):MachinePets(s){} string PetDogs::talk(){ return "rao~"; } void play(MachinePets * pet){ cout<<pet->getNickname()<<‘ ‘<<"says"<<‘ ‘<<pet->talk()<<endl; } int main() { PetCats cat("xiro neko"); PetDogs dog("dogmeat"); play(&cat); // 按照play()形参,传递参数 play(&dog); // 按照play()形参,传递参数 return 0; }main.cpp
rpg游戏---等写完了再补充上面去(咕咕咕)
总结
注意基类中成员函数有无关键字virtual,访问的成员分别是什么。