一、今日学习内容:
今天练习实验七的内容。
二、遇到的问题:
无
三、明日计划:
明天继续练习实验七的习题。
今日练习的具体内容如下:
1.人、学生和教师
设计一个类people,有保护数据成员:age(年龄,整型),name(姓名,string),行为成员:两个构造函数(一个默认,另一个有参数);void setValue(int m, string str)给age和name赋值;有一个void类型的纯虚函数display()。
设计一个学生类student,公有继承类people,有私有成员:studentID(学号,整型),行为成员:两个构造函数(一个默认,另一个有参数);void setID(int m)给studentID赋值;display()函数输出学生的姓名,年龄,学号。
设计一个教师类teacher,公有继承类people,有私有成员:teacherID(工号,整型),行为成员:两个构造函数(一个默认,另一个有参数);void setID(int m)给teacherID赋值; display()函数输出教师的姓名,年龄,工号。
在main函数定义学生对象和教师对象,给对象初始化赋值或调用setValue()和setID()赋值,并输出学生和老师的信息。
提示:纯虚函数所在类不可定义对象
import java.util.Scanner; public abstract class People_teacher { protected int age; protected String name; People_teacher(){ } People_teacher(int a,String s){ age=a; name=s; } public void setvalue(int a,String s){ age=a; name=s; } public abstract void display(); public static void main(String[] args) { Scanner sc=new Scanner(System.in); Scanner sc1=new Scanner(System.in); System.out.println("请输入一个学生的学号、年龄、姓名:"); int a=sc.nextInt(); int b=sc.nextInt(); String s=sc.nextLine(); student stu=new student(); stu.setvalue(a,b,s); System.out.println("请输入一个教师的工号、年龄、姓名:"); int a1=sc1.nextInt(); int b1=sc1.nextInt(); String s1=sc1.nextLine(); teacher tea=new teacher(); tea.setvalue(a1,b1, s1); stu.display(); tea.display(); } } class student extends People_teacher{ private int StudentID; student(){ } student(int m){ StudentID=m; } public void setvalue(int m,int a,String s) { StudentID=m; age=a; name=s; } @Override public void display() { System.out.println("姓名:"+name); System.out.println("年龄:"+age); System.out.println("学号:"+StudentID); } } class teacher extends People_teacher{ private int TeacherID; teacher(){ } teacher(int m){ TeacherID=m; } public void setvalue(int m,int a,String s) { TeacherID=m; age=a; name=s; } @Override public void display() { System.out.println("姓名:"+name); System.out.println("年龄:"+age); System.out.println("工号:"+TeacherID); } }
测试截图:
2.动物类
【问题描述】
定义猫科动物Animal类,由其派生出猫类(Cat)和豹类(Leopard),在Animal类中定义虚函数,输出“My name is Animal”,在派生类中分别重新定义该函数,显示“My name is **”,其中**为各自类名
public class Animal { private String name="Animal"; public void show() { System.out.println("My name is "+name+"!"); } public static void main(String [] args) { Animal A=new Animal(); A.show(); cat C=new cat(); C.show(); Leopard L=new Leopard(); L.show(); } } class cat extends Animal{ private String name="Cat"; public void show() { System.out.println("My name is "+name+"!"); } } class Leopard extends Animal{ private String name="Leopard"; public void show() { System.out.println("My name is "+name+"!"); } }
测试截图:
3.形状类
【问题描述】
定义shape类,无数据成员,包含两个纯虚函数成员void setvalues() 和float area() ,由shape类进行派生如下:
矩形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
三角形类,包含两个数据成员变量用于描述底和高,均为float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
正方形类,包含一个数据成员变量用于描述边长,float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
圆形类,包含一个数据成员变量用于描述半径,float类型,重新定义上述两个纯虚函数成员,完成数据成员值的设定和面积的计算;
在主函数中定义相应的指针对象和普通对象,利用虚函数实现多态,依次分别输入矩形的底和高,三角形的底和高,正方形的边长,圆形的半径,若其中任何一个值小于等于0,则输出Set Value Error!,然后退出程序,对于之前已正确输入的数值计算相应形状的面积。
import java.util.Scanner; public abstract class shape { public abstract void setvalue(float m,float n); public abstract float area(); public static void main(String [] args) { System.out.println("请输入矩形的长和宽:"); Scanner sc=new Scanner(System.in); float x=sc.nextFloat(); float y=sc.nextFloat(); if(x<0||y<0) { System.out.println("Setvalue error!"); System.exit(0); } Rectangle R=new Rectangle(); R.setvalue(x, y); R.area(); System.out.println(); System.out.println("请输入三角形的高和底:"); Scanner sc1=new Scanner(System.in); float x1=sc1.nextFloat(); float y1=sc1.nextFloat(); if(x1<0||y1<0) { System.out.println("Setvalue error!"); System.exit(0); } Triangle T=new Triangle(); T.setvalue(x1, y1); T.area(); System.out.println(); System.out.println("请输入正方形的边长:"); Scanner sc2=new Scanner(System.in); float x2=sc2.nextFloat(); if(x2<0) { System.out.println("Setvalue error!"); System.exit(0); } Square S=new Square(); S.setvalue(x2,x2); S.area(); System.out.println(); System.out.println("请输入圆形的半径和Pi:"); Scanner sc3=new Scanner(System.in); float x3=sc3.nextFloat(); float y3=sc3.nextFloat(); if(x3<0||y3<0) { System.out.println("Setvalue error!"); System.exit(0); } Circle C=new Circle(); C.setvalue(x3, y3); C.area(); } } class Rectangle extends shape{ private float height; private float weight; @Override public void setvalue(float m, float n) { height=m; weight=n; } @Override public float area() { float result; result=height*weight; System.out.println("矩形的面积为:"+result); return 0; } } class Triangle extends shape{ private float height; private float weight; public void setvalue(float m, float n) { height=m; weight=n; } @Override public float area() { float result; result=height*weight/2; System.out.println("矩形的面积为:"+result); return 0; } } class Square extends shape{ private float a; @Override public void setvalue(float m, float n) { a=m; a=n; } @Override public float area() { float result; result=a*a; System.out.println("矩形的面积为:"+result); return 0; } } class Circle extends shape{ private float r; private float Pi; @Override public void setvalue(float m, float n) { r=m; Pi=n; } @Override public float area() { float result; result=Pi*r*r; System.out.println("矩形的面积为:"+result); return 0; } }
测试截图: