今天做C++典型例题。
定义shape类,无数据成员,包含两个纯虚函数成员void setvalues() 和float area() ,由shape类进行派生如下:
矩形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
三角形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
正方形类,包含一个数据成员变量用于描述边长,float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
圆形类,包含一个数据成员变量用于描述半径,float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
在主函数中定义相应的指针对象和普通对象,利用虚函数实现多态,依次分别输入矩形的底和高,三角形的底和高,正方形的边长,圆形的半径,若其中任何一个值小于等于0,则输出Set Value Error!,然后退出程序,对于之前已正确输入的数值计算相应形状的面积。
代码如下
package hello;
import java.util.Scanner;
abstract class shape{
abstract public void setvalues(float a,float b);
abstract public float area();
}
class juxing extends shape{
private float di,gao;
public void setvalues(float a,float b) {
di=a;
gao=b;
}
public float area() {
return di*gao;
}
}
class sanjiao extends shape{
private float di,gao;
public void setvalues(float a,float b) {
di=a;
gao=b;
}
public float area() {
return di*gao/2;
}
}
class zheng extends shape{
private float bian;
public void setvalues(float a,float b) {
bian=a;
}
public float area() {
return bian*bian;
}
}
class yuan extends shape{
private float r;
public void setvalues(float a,float b) {
r=a;
}
public float area() {
return (float) (3.14*r*r);
}
}
public class helloword {
public static void main(String[] args){
Scanner cn=new Scanner(System.in);
System.out.println("输入矩形的底和高");
juxing j=new juxing();
j.setvalues(cn.nextFloat(), cn.nextFloat());
System.out.println("矩形面积:"+j.area());
sanjiao s=new sanjiao();
System.out.println("输入三角形的底和高");
s.setvalues(cn.nextFloat(),cn.nextFloat());
System.out.println("三角形的面积:"+s.area());
zheng z=new zheng();
System.out.println("输入正方形的边长");
z.setvalues(cn.nextFloat(), 0);
System.out.println("正方形的面积:"+z.area());
yuan y=new yuan();
System.out.println("圆的半径");
y.setvalues(cn.nextFloat(),0);
System.out.println("圆的面积:"+y.area());
}
}
这道题目都继承了一个类shape,都会重写shape类中的函数,可以算多个图形的面积。
明天继续做C++典型例题。