今天继续做C++典型例题。
定义描述学生的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,则输出研究生对象的默认属性值,若非零,则依次输入姓名、学号、专业和导师信息,并依次打印出来。
代码如下
package hello;
import java.util.Scanner;
abstract class student{
protected String name;
protected int num;
student(String a,int b){
name=a;
num=b;
}
public void stuset(String a,int b) {
name=a;
num=b;
}
public void display() {
System.out.println("name:"+name+" num:"+num);
}
abstract public void setmajor(String a);
abstract public String getmajor();
abstract public void setadvisor(String a);
abstract public String getadvisor();
}
class understud extends student{
protected String major;
public understud(String a,int b,String c) {
super(a,b);
major=c;
}
public understud(String a,int b) {
super(a,b);
}
public void setmajor(String a) {
major=a;
}
public String getmajor() {
return major;
}
public void setadvisor(String a) {}
public String getadvisor() {return "0";}
public void display() {
System.out.println("name:"+name+" num:"+num+" major:"+major);
}
}
class poststud extends understud{
private String teaname;
poststud(String a,int b,String c,String d){
super(a,b,c);
teaname=d;
}
public void setteaname(String a) {
teaname=a;
}
public poststud(String a,int b,String c) {
super(a,b,c);
}
public void setmajor(String a) {}
public String getmajor() {return "0";}
public void setadvisor(String a) {
teaname=a;
}
public String getadvisor() {
return teaname;
}
public void display() {
System.out.println("name:"+name+" num:"+num+" major:"+major+" teaname:"+teaname);
}
}
public class helloword {
public static void main(String[] args){
Scanner cn=new Scanner(System.in);
System.out.println("输入本科生姓名年龄");
student s=new understud(cn.next(),cn.nextInt());
understud u=(understud)s;
System.out.println("输入本科生专业");
u.setmajor(cn.next());
u.display();
System.out.println("输入研究生姓名年龄专业");
student s1=new poststud(cn.next(),cn.nextInt(),cn.next());
System.out.println("输入导师姓名");
poststud p=(poststud)s1;
p.setadvisor(cn.next());
p.display();
}
}
这道题目做他的目的是和昨天的那一道题相比,这道题涉及到了向上类型转换和向下类型转换,因为父类中的属性需要构造函数或者get函数来获得值,所以要实现功能就要使用两种转换。
明天寻找典型题目做。