OJ刷题---抽象一个形状类

题目要求:

输入代码:

#include<iostream>
using namespace std;
class Shape
{
public:
    virtual double area()const =0 ;  //虚基函数
};
class Rectangle :public Shape
{
public:
    Rectangle (double l,double w)
    {
        length=l;
        weith=w;
    }
    double area()const;
private:
    double length ,weith;
};
double Rectangle::area()const//const包含this指针,不能被修改的类成员函数
{
    double S;
    S=weith*length;
    return S;
}
class Triangle:public Shape
{
public:
    double area()const ;
    Triangle (double w,double h)
    {
        Width=w;
        height=h;
    }
private:
    double Width;
    double height;
};
double Triangle::area()const
{
    double S;
    S=(Width*height)/2.0;
    return S;
}
int main()
{
    double a,b;
    cin>>a>>b;   //输入矩形的长和宽
    Rectangle r(a,b);//建立Rectangle类对象r, 矩形长a宽b
    Shape *s1=&r;
    cout<<s1->area()<<endl;//输出矩形的面积
    double w,h;
    cin>>w>>h;   //输入矩形的长和宽
    Triangle t(w,h); //建立Triangle类对象t,三角形底边长w高h
    Shape &s2=t;
    cout<<s2.area();//输出三角形面积
    return 0;
}

运行结果:

总结:

开始写程序时,并没有在虚基函数area()后加const常变量,因为这个知识点自己忽略了,后来问同学才明白了。知道了const在类函数中的用法

时间: 2024-10-10 22:06:24

OJ刷题---抽象一个形状类的相关文章

抽象一个形状类

Problem C: 抽象一个形状类 Description 阮宝同学期待着暑假来临,知道C++不好好复习麻烦不小.没有多态性,那就不叫面向对象,老师不划重点也能猜到.嘿嘿,自己做个经典题,怎么变题也不怕.老湿,再难的题还有木有? Input 输入四个数,前两个是矩形的长和宽,后两个是三角形的底边长和高. Output 分两行输出两个数,第一个是矩形的面积,第二个是三角形的面积. Sample Input 3.5 6.4 3.5 6.4 Sample Output 22.4 11.2 HINT

第十五周oj刷题—— Problem C: 矩形类中运算符重载【C++】

Description 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,实现矩形加法,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. 两个矩形相加的规则是:决定矩形的对应坐标分别相加,如 左下角(1,2),右上角(3,4)的矩形,与 左下角(2,3),右上角(4,5)的矩形相加,得到的矩形是 左下角(3,5),右上角(7,9)的矩形. 这个规则没有几何意义,就这么定义好了. 输出面积的功能通过重载"<<&quo

第十五周oj刷题——Problem B: 矩形类定义【C++】

Description 定义一个矩形类,数据成员包括左下角和右上角坐标,定义的成员函数包括必要的构造函数.输入坐标的函数,以及计算并输出矩形面积的函数.要求使用提示中给出的测试函数并不得改动. Input 四个数,分别表示矩形左下角和右上角顶点的坐标,如输入3.7 0.4 6.5 4.9,代表左下角坐标为(3.7, 0.4),右上角坐标为(6.5, 4.9). Output 输出一共有3行(请参考提示(hint)中的main函数): 第一行:由输入的坐标确定的矩形对象p1的面积 第二行:由对象复

第十七周oj刷题——Problem B: 分数类的四则运算【C++】

Description 编写分数类Fraction,实现两个分数的加.减.乘和除四则运算.主函数已给定. Input 每行四个数,分别表示两个分数的分子和分母,以0 0 0 0 表示结束. Output 空格分隔的两个分数的减和除的结果. Sample Input 1 2 -1 2 4 3 3 4 0 0 0 0 Sample Output 1 -1 7/12 16/9 /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 7

第十六周oj刷题——Problem I: 改错题:类中私有成员的访问

Description 改错题: 设计一个日期类和时间类,并编写全局函数display用于显示日期和时间.要求:display函数作为类外的普通函数,而不是成员函数 在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年.月.日和时.分.秒. Input 年      月       日 时      分       秒 Output 年/月/日 时:分:秒 Sample Input 2013 12 23 14 23 50 Sample Ou

第十六周oj刷题——Problem I: 改错题:类中私有成员的訪问

Description 改错题: 设计一个日期类和时间类,并编写全局函数display用于显示日期和时间. 要求:display函数作为类外的普通函数,而不是成员函数 在主函数中调用display函数.display函数分别引用Time和Date两个类的对象的私有数据.输出年.月.日和时.分.秒. Input 年      月       日 时      分       秒 Output 年/月/日 时:分:秒 Sample Input 2013 12 23 14 23 50 Sample O

OJ刷题常用的4中基本输入形式

初到OJ网站上刷题,输入形式就是我们要考虑的问题.通过自己的一些摸索,OJ题目的输入形式大体上无外乎4种.下面就详细介绍: 1 输入数据文件中,第一行数据标明了测试数据的数目: 2 输入数据文件中,有标明输入结束的数据 3 输入数据文件中,测试数据一直到文件尾 4 没有输入数据 第1中情形的处理方法: //int i,kase scanf("%d",&kase); for(i=1;i<=kase;i++) { //处理第i中情况 } ...................

JS、JAVA刷题和C刷题的一个很重要的区别

就是最近在做树方面的题时,发现JS和JAVA刷题和C刷题的一个很重要的区别就是传入null的区别 当遍历的时候,C传参数时可以传进去null的指针,因为递归进去,出来时,指针还是指着那个地方 但是JS和JAVA的话,如果传入的不是引用,那么就要通过返回值来记录之前的值,不然的话会丢失之前的状态. 我经常就在null这里犯错误,因为null在C中是null指针,但是在JS和JAVA中null不是引用,仅仅是一种特殊的值. 所以使用JS和JAVA刷关于树递归的题时,最好就是把你要求的值传进去后再返回

实验四 (1):定义一个形状类(Shape)方法:计算周长,计算面积

(1)定义一个形状类(Shape)方法:计算周长,计算面积子类:矩形类(Rectangle) :额外的方法:differ() 计算长宽差圆形类(Circle)三角形类(Triangle)正方形类(Square) 矩形的子类生成几个不同的形状对象,放在一个Shape类型的数组里,分别求每个形状的周长和面积.如果形状对象是一个矩形,且不是正方形,则计算长宽差. 1 package com.tiger.practice; 2 3 class Shape { 4 5 public double leng