一、今日学习内容
学生(student)类:
定义描述学生的student类,包含受保护两个数据成员,分辨是描述姓名的,string类型和描述学号的,int类型,构造函数有两个形参,用于设定这两个数据成员的值,此外包含6个成员函数,用于设定姓名和学号的函数,void setnameid(), 用于显示姓名和学号的函数void displaynameid(),以及四个纯虚函数void setmajor() ,string getmajor() , void setadvisor() 和 string getadvisor();
由学生类派生本科生类understud,新增受保护数据成员,描述专业,string类型,构造函数具有三个形参,重新定义函数void setmajor() 和string getmajor(),用于设置专业和获取专业;
由本科生类派生研究生类poststud,新增私有数据成员,描述导师姓名,string类型,构造函数具有四个形参,且具有缺省值,学生姓名缺省值为“***”,学号缺省值为-1,专业缺省值为“###”,导师姓名缺省值为“&&&”,重新定义函数void setadvisor() 和 string getadvisor(),用于设置导师属性和获取导师属性值;
在主函数中定义相应的指针对象和普通对象,请问可以定义哪些(哪个)类的普通对象,为什么(在实验报告中回答),定义开关变量,int型,通过输入进行赋值,若该值为0,则输出研究生对象的默认属性值,若非零,则依次输入姓名、学号、专业和导师信息,并依次打印出来。
1 //Student类: 2 import java.util.*; 3 public abstract class Student4 { 4 protected String name="***"; 5 protected int ID=-1; 6 Student4(){} 7 Student4(String n,int i){ 8 name=n; 9 ID=i; 10 } 11 public void setnameid() { 12 System.out.println("请输入姓名、学号:"); 13 Scanner con=new Scanner(System.in); 14 name=con.next(); 15 ID=con.nextInt(); 16 } 17 public void displaynameid() { 18 System.out.println("姓名:"+name+"\t学号:"+ID); 19 } 20 public abstract void setmajor(); 21 public abstract String getmajor(); 22 public abstract void setadvisor(); 23 public abstract String getadvisor(); 24 } 25 //understud类: 26 import java.util.*; 27 public class understud extends Student4 { 28 protected String major="###"; 29 understud(){} 30 understud(String n,int id,String m){ 31 super(n,id); 32 major=m; 33 } 34 public void setmajor() { 35 System.out.println("请输入专业:"); 36 Scanner con=new Scanner(System.in); 37 major=con.next(); 38 } 39 public String getmajor() { 40 return major; 41 } 42 public void setadvisor() {} 43 public String getadvisor() {return "0";} 44 } 45 //Poststud类: 46 import java.util.Scanner; 47 public class poststud extends understud{ 48 private String name2="&&&"; 49 poststud(){} 50 poststud(String n,int id,String m,String n2){ 51 super(n,id,m); 52 name2=n2; 53 } 54 public void setadvisor() { 55 System.out.println("请输入导师姓名:"); 56 Scanner con=new Scanner(System.in); 57 name2=con.next(); 58 } 59 public String getadvisor() { 60 return name2; 61 } 62 } 63 //Test类: 64 import java.util.Scanner; 65 public class Test4 { 66 public static void main(String[] args) { 67 int n; 68 System.out.println("***************************"); 69 System.out.println("0、输出研究生对象的默认属性值"); 70 System.out.println("1、输入并输出信息"); 71 System.out.println("***************************"); 72 Scanner con=new Scanner(System.in); 73 n=con.nextInt(); 74 poststud v1=new poststud(); 75 switch(n) { 76 case 0:{ 77 v1.displaynameid(); 78 System.out.println("专业:"+v1.getmajor()); 79 System.out.println("导师姓名:"+v1.getadvisor()); 80 break; 81 } 82 case 1:{ 83 v1.setnameid(); 84 v1.setmajor(); 85 v1.setadvisor(); 86 v1.displaynameid(); 87 System.out.println("专业:"+v1.getmajor()); 88 System.out.println("导师姓名:"+v1.getadvisor()); 89 break; 90 } 91 } 92 } 93 }
二、遇到的问题
对Java中构造函数如何设置默认缺省值不清楚,通过百度得知。
三、明日计划
继续完成c++例题的验证。