c++练习题,动物爱吃什么

    技术2022-07-12  66

    7-1 动物爱吃什么 (10分)

    1.设计一个基类动物类(animal),包含private数据成员:动物编号int num;和动物名称string name;public成员函数:getnum( )用于获取其编号, getname( )用于获取其名称和一个纯虚函数eat( ),以及构造函数。

    2.由animal类派生出狗类Dog和猫类Cat,每个类中均有自己的构造函数,根据输出结果设计这两个类并在主函数中完成设计类的输出测试

    3.要求在主函数中必须使用基类指针调用虚函数eat( ).

    输入格式:

    输入两行,每一行分别是动物编号num和动物名称name,中间空格分隔。

    输出格式:

    输出两行,每一行显示动物编号num、动物名称name和爱吃的食物。

    输入样例:

    在这里给出一组输入。例如:

    1 金毛 2 波斯

    输出样例:

    在这里给出相应的输出。例如:

    1号金毛啃骨头 2号波斯吃小鱼

    代码实现:

    ​#include<iostream>//该题考查多态的使用 #include<cstring>//先按照题目要求写出相关的函数和类 using namespace std; class Animal{ private: int num; string name; public: Animal(int n,string m):num(n),name(m) { } Animal() { } int getnum()//由于他们是私有的,但是这不妨碍我们通过成员函数来访问他们 {//由此可见,类的私有成员可以通过这样访问 return num; } string getname() { return name; } virtual void eat() { } //virtual void eat()=0;不建议这样写因为如果这样写的话就是抽象类了, //抽象类只能作为基类来派生新类使用,不能创建抽象类的对象 }; class Dog:public Animal { public: virtual void eat()//其实不用写那个virtual也是对的 { cout<<Animal::getnum()<<"号"<<Animal::getname()<<"啃骨头"<<endl; }//这里的Animal是派生类调用基类的getnum()函数的一种形式,基类名::函数名 Dog(int n,string m):Animal(n,m)//析构函数,用来初始化。对应下面的 { } }; class Cat:public Animal{ public: virtual void eat()//和上面的类似 { cout<<Animal::getnum()<<"号"<<Animal::getname()<<"吃小鱼"<<endl; } Cat(int n,string m):Animal(n,m) { } }; int main() { int num1,num2;//先定义后使用 string name1,name2; cin>>num1>>name1; cin>>num2>>name2; Dog b(num1,name1);//让类的相关数据初始化 Cat c(num2,name2); Animal *p; p=&b;//让基类指针指向派生类对象, p->eat();//多态,派生类的eat()函数被调用 p=&c; p->eat(); return 0; }​

    以上均为个人的小看法,如有错误,欢迎来指正。

     

     

     


    Processed: 0.010, SQL: 10