2020.8.20

一、今日学习内容

学生(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++例题的验证。

原文地址:https://www.cnblogs.com/marr/p/13582867.html