美文网首页
虚函数与多态

虚函数与多态

作者: 1墨家巨子 | 来源:发表于2019-10-09 10:45 被阅读0次

题目1

/****************************************************************
【基本题】定义了一个基类Animal, 它包含两个数据成员动物名称(string类型)和重量,
还包含一个公共的虚拟成员函数who() 和一个纯虚函数sound()。
公共的虚拟成员函数who(),显示名称和重量,在派生类中sound() ,显示示该动物发出的声音。
把Animal类作为一个公共基类,派生三个子类Sheep,Dog和Cow,在每个类中实现sound()函数。
    定义一个类Zoo,它至多可以在一个数组中存储50种不同类型的动物(使用指针数组)。
编写一个main()函数,创建给定数量的派生类对象,在Zoo对象中存储这些对象的指针。
使用Zoo对象的一个成员函数,输出Zoo中每个动物的信息,以及每个动物发出的声音。
*************************************************************/
#include <iostream>
#include <string>
using namespace std;
class Animal{
private:
    string animal_name;
    float  weight;
public:
    Animal():animal_name("zoo"),weight(120){}
    Animal(string a,float w):animal_name(a),weight(w){}
    virtual void who(){}
    virtual void sound(){}
    void GetWho(){
      cout<<animal_name<<endl<<weight<<endl;
    }
};
class Sheep: public Animal{
public:
    Sheep(): Animal(){}
    void who();
    void sound(){
        cout<<"咩"<<endl;
    }

};
void Sheep::who(){
    GetWho();
}
class Dog: public Animal{
public:
    Dog(): Animal(){}
    void who();
    void sound(){
        cout<<"汪"<<endl;
    }

};
void Dog::who(){
   GetWho();
}
class Cow: public Animal{
public:
    Cow(): Animal(){}
    void who();
    void sound(){
        cout<<"哞"<<endl;
    }
};
void Cow::who(){
    GetWho();
}
class Zoo{
private:
   Animal **panimal;
public:
   void getsound(Animal *obj[], int num);

};
void Zoo::getsound(Animal *obj[],int num){
    panimal=obj;
    for(int i=0;i<num;i++){
        panimal[i]->sound();
        panimal[i]->who();
    }
}

题目2

//【基本题】 Shape类是一个表示形状的抽象类,其中GetArea()为求图形面积的纯虚函数。
//从Shape类派生三角形类(Triangle)、矩形类(Rectangle),椭圆类(Ellipse)并重写GetArea()函数完成求面积的功能。
//GetTotalArea(…)则是一个用以求不同形状的图形面积总和的函数,完成该函数。
//写出main函数:创建多个三角形或矩形或椭圆对象(个数不定,由用户的输入指定),
//并调用GetTotalArea()函数求出它们的总面积。
//提示:
//1. GetTotalArea()应设计成全局函数
#include <iostream>
#define PI 3.1415926
using namespace std;
class Shape{
public:
    virtual float GetArea(){}
    friend  float GetTotalArea(Shape * obj[],int num);
};

float GetTotalArea(Shape * obj[],int num){
    float S=0;
    for(int i=0;i<num;i++){
       S+=obj[i]->GetArea();
    }
    cout<<S<<endl;
    return S;
}
class Triangle: public Shape{
public:
    virtual float GetArea();
   Triangle(float b=1.5,float h=2):Bottom(b),High(h){}
private:
   float Bottom;
   float High;
};
 float Triangle::GetArea(){
     float S;
     S=Bottom*High/2;
     cout<<S<<endl;
     return S;
 }
class Rectangle: public Shape{
public:
    float GetArea();
    Rectangle(float L=1.5,float W=2):Lenght(L),Width(W){}
private:
   float Lenght;
   float Width;
};
float Rectangle::GetArea(){
    float S;
    S=Lenght*Width;
    cout<<S<<endl;
    return S;
}
class Ellipse: public Shape{
public:
    float GetArea();
    Ellipse(float a=1.5,float b=2){
      this->a=a;
      this->b=b;
  }
private:
   float a; //长半轴
   float b; //短半轴
};
float Ellipse::GetArea(){
    float S;
    S=a*b*PI;
    cout<<S<<endl;
    return S;
}

相关文章

  • 查漏补缺

    C++虚函数: 多态: 静态多态(重载)、动态多态(虚函数) 虚函数 虚函数表:编译器为每个类创建了一个虚函数表...

  • 多态与虚函数

    多态与虚函数 注意 在成员函数(静态成员、构造函数和析构函数除外)中调用同类的虚函数的语句是多态的。 在构造函数和...

  • 虚函数与多态

    题目1 题目2

  • 多态与虚函数

    多态的基本概念 实现了多态机制的程序,可以使用同一个名字完成不同的功能。 多态分为编译时多态和运行时多态。 多态 ...

  • GeekBand-C++面向对象高级编程(下)-Week2

    对象模型:虚函数表(vtbl)与虚表指针(vptr) 我们知道,C++中,可以通过虚函数来实现多态性,而虚函数是通...

  • 2020-07-06----《C++类的学习》

    函数重载:同名不同参。 C++类的特点:封装、继承、多态。 //多态与函数重载是啥关系? 虚函数:和软件架构相关 ...

  • C++虚函数注意事项以及构成多态的条件

    C++ 虚函数对于多态具有决定性的作用,有虚函数才能构成多态。 虚函数注意事项 只需要在虚函数的声明处加上 vir...

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • c++虚函数与虚表初步

    虚指针与虚表 虚表和虚函数是为了实现动态多态的机制,由编译器实现 当一个类本身定义了虚函数,或其父类有虚函数时,编...

  • 课时63 多态基本概念

    多态与虚函数多态是一种泛型编程思想虚函数是实现这个思想的语法基础即同样的代码,实现不同的功能核心:父类的指针,调用...

网友评论

      本文标题:虚函数与多态

      本文链接:https://www.haomeiwen.com/subject/uapwpctx.html