虚函数-计算图形面积

Problem B: C++习题 虚函数-计算图形面积

Description

编写一个程序,定义抽象基类Shape,由它派生出5个派生类: Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。

用虚函数分别计算几种图形面积,并求它们之和。

要求用基类指针数组,使它每一个元素指向一个派生类对象。

Input

圆的半径

正方形的边长

矩形的边长

梯形的上底和下底,高

三角形的底与高

Output

所有图形面积之和(结果保留两位小数)

Sample Input

12.6
3.5
4.5 8.4
2.0 4.5 3.2
4.5 8.4

Sample Output

total of all areas=574.11

HINT

#include <iostream>
#include <iomanip>
using namespace std;
class Shape
{
public:
    virtual double area() const=0;
}; 

class Circle:public Shape
{
public:
Circle(double r):radius(r){}
virtual double area() const{return 3.14159*radius*radius;}
protected:
    double radius;
}; 

class Rectangle:public Shape
{
public:
Rectangle(double r,double l):width(r),height(l){}
virtual double area() const{return width*height;}
protected:
    double width;
    double height;
}; 

class Triangle:public Shape
{
public:
Triangle(double r,double l):width(r),heigth(l){}
virtual double area() const{return 0.5*width*heigth;}
protected:
    double width;
    double heigth;
}; 

class Trapezoid:public Shape
{
public:
Trapezoid(double r,double l,double k):top(r),bottom(l),height(k){}
virtual double area() const{return 0.5*(top+bottom)*height;}
protected:
    double top;
    double bottom;
    double height;
}; 

class Square:public Shape
{
public:
Square(double r):side(r){}
virtual double area() const{return side*side;}
protected:
    double side;
}; 

int main()
{
    float r,a,b,w1,w2,w,h;
    cout<<fixed<<setprecision(2);
    cin>>r;
    Circle circle(r);
    cin>>a;
    Square square(a);
    cin>>a>>b;
    Rectangle rectangle(a,b);
    cin>>w1>>w2>>h;
    Trapezoid trapezoid(w1,w1,h);
    cin>>w>>h;
    Triangle triangle(w,h);
    Shape *pt[5]= {&circle,&square,&rectangle,&trapezoid,&triangle};
    double areas=0.0;
    for(int i=0; i<5; i++)
        areas=areas+pt[i]->area();
    cout<<"total of all areas="<<areas<<endl;
    return 0;
} 

虚函数-计算图形面积

时间: 2024-10-12 04:45:45

虚函数-计算图形面积的相关文章

C++习题 虚函数-计算图形面积

C++习题 虚函数-计算图形面积 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 122  Solved: 86 [Submit][Status][Web Board] Description 编写一个程序,定义抽象基类Shape,由它派生出5个派生类: Circle(圆形).Square(正方形).Rectangle(矩形).Trapezoid(梯形).Triangle(三角形). 用虚函数分别计算几种图形面积,并求它们之和. 要求用基类指针数组

读书笔记 effective c++ Item 35 考虑虚函数的替代者

1. 突破思维——不要将思维限定在面向对象方法上 你正在制作一个视频游戏,你正在为游戏中的人物设计一个类继承体系.你的游戏处在农耕时代,人类很容易受伤或者说健康度降低.因此你决定为其提供一个成员函数,healthValue,返回一个整型值来表明一个人物的健康度.因为不同的人物会用不同的方式来计算健康度,将healthValue声明为虚函数看上去是一个比较明显的设计方式: 1 class GameCharacter { 2 public: 3 4 virtual int healthValue()

虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte

#include <iostream> using namespace std; class A { public: A(){} virtual void geta(){ cout << "A:A" <<endl; } virtual void getb(){ cout << "A:B" <<endl; } }; class B :public A{ public: B(){} virtual void g

如何理解虚表及其计算含虚函数的类的大小

在什么情况下系统会自动生成缺省(默认)的构造函数? 1.在类里面有一个类类型的对象,这个类有自己的缺省构造函数(有缺省的参数,参数有缺省值). class B { B(int data) {  } };不能合成 class B { B(int data=0) {  } };会合成 class B { public: B(int data=0) {  } }; class C:public B { public: C() :B(0) {  } B b;  //编译器会自动合成 }; 2.类是虚拟继

C++中虚函数工作原理和(虚)继承类的内存占用大小计算

一.虚继承情况下类的内存大小计算 当每个基类中有多个虚函数时,并且在虚继承的情况下,内存是如何分配的,如何计算类的大小,下面举例说明: #include<iostream> using namespace std; class A { public: int a; virtual void aa(){}; }; class D { public: virtual void dd(){}; }; class C { public: virtual void cc(){}; }; class B

C++多态性与虚函数

面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了"一个接口,多种方法". 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性.前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载.后者则是通过动态联编来实现的,在C++中运行时的多态性主要是通过虚函数来实现的. 赋值兼容     不过在说虚函数之前,先介绍一个有关

C++之多态性与虚函数

面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了“一个接口,多种方法”. 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性.前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载.后者则是通过动态联编来实现的,在C++中运行时的多态性主要是通过虚函数来实现的,也正是今天我们要讲的主要内容. 1.不过在说虚函数之前,我想先介

[转]C++之多态性与虚函数

面向对象程序设计中的多态性是指向不同的对象发送同一个消息,不同对象对应同一消息产生不同行为.在程序中消息就是调用函数,不同的行为就是指不同的实现方法,即执行不同的函数体.也可以这样说就是实现了“一个接口,多种方法”. 从实现的角度来讲,多态可以分为两类:编译时的多态性和运行时的多态性.前者是通过静态联编来实现的,比如C++中通过函数的重载和运算符的重载.后者则是通过动态联编来实现的,在C++中运行时的多态性主要是通过虚函数来实现的,也正是今天我们要讲的主要内容. 1.不过在说虚函数之前,我想先介

对C++虚函数、虚函数表的简单理解

一.虚函数的作用 以一个通用的图形类来了解虚函数的定义,代码如下: #include "stdafx.h" #include <iostream> using namespace std; class Graph { protected: double x; double y; public: Graph(double x,double y) { this->x=x; this->y=y; } virtual void showArea() { cout<