C++编程练习:多态实验——设计一个基类Shapes,Shapes类公有派生产生矩形类Rectangle和圆类Circle

简介: C++编程练习:多态实验——设计一个基类Shapes,Shapes类公有派生产生矩形类Rectangle和圆类Circle

例、设计一个基类Shapes,包含成员函数display()并声明为纯虚函数。Shapes类公有派生产生矩形类Rectangle和圆类Circle,分别定义display()函数实现其主要几何元素的显示。使用抽象类Shapes类型的指针(或引用),当它指向(或引用)某个派生类的对象时,就可以通过它访问该对象的虚成员函数display()实现动态多态性。


代码如下:


头文件:

//头文件
#include <iostream>
#define PI 3.141265
using namespace std;
class Shapes
{
public:
  virtual void display() = 0;  //成员函数dispaly()声明为纯虚函数
};
class Rectangle : virtual public Shapes
{
protected:
  float x, y;
public:
  float length;
  float width;
  Rectangle()
  {
  }
  Rectangle(float a, float b)
  {
  x = a;
  y = b;
  }
  virtual float getRectangle()
  {
  return (x * y);
  }
  virtual void display()
  {
  cout << "矩形的长为:" << x << endl;
  cout << "矩形的宽为:" << y << endl;
  cout << "矩形的面积为:" << getRectangle() << endl;
  }
};
class Circle : virtual public Shapes
{
protected:
  int r;
public:
  Circle()
  {
  }
  Circle(float R)
  {
  r = R;
  }
  virtual float getCircle()
  {
  return PI * r * r;
  }
  virtual void display()
  {
  cout << "圆的半径为:" << r << endl;
  cout << "圆的面积为:" << getCircle() << endl;
  }
};

主函数:

//主函数
#include <iostream>
#include "头文件.h"
#define PI 3.141265
using namespace std;
int main()
{
  Shapes* p;
  double a = 0, b = 0, r = 0;
  cout << "请分别输入矩形的长和宽:" << endl;
  cin >> a >> b;
  Rectangle A(a, b);
  p = &A;
  p->display();
  cout << "" << endl;
  cout << "请输入圆的半径:" << endl;
  cin >> r;
  Circle B(r);
  p = &B;
  p->display();
  system("pause");
  return 0;
}


测试功能:

1666890528401.jpg

代码测试成功!


以上就是本次C++的全部内容,感谢您的阅读和支持,篇幅较长,若有表述或者代码中的不当之处,望指出!您的指出和建议能给作者带来很大的动力!!!


相关文章
|
3天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
19 0
|
3天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0
|
2天前
|
设计模式 Java C++
【C++高阶(八)】单例模式&特殊类的设计
【C++高阶(八)】单例模式&特殊类的设计
|
2天前
|
编译器 C++
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
|
3天前
|
编译器 C++
c++的学习之路:23、多态(2)
c++的学习之路:23、多态(2)
17 0
|
6天前
|
存储 安全 C语言
【C++】string类
【C++】string类
|
28天前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
38 0
|
28天前
|
存储 编译器 C语言
C++入门: 类和对象笔记总结(上)
C++入门: 类和对象笔记总结(上)
34 0
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
8天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”