漫漫编程路——C++篇(四)——关于在类中定义一些属于该类的一些类

来源:互联网 发布:js button value值 编辑:程序博客网 时间:2024/05/17 01:51
这个题目不好,但是我确实无法清楚的表达我想表达的意思,只能让人自己看了,其实这个主要还是考你的动态分配对象的空间,其他就没什么了,个人理解。
例题:
设 有教师若干名,每个教师有姓名信息,一个教师可以指导多名研究生,每名研究生有学号、姓名和研究方向信息。编写一个程序,要求输出每名教师所指导的所有研 究生的学号、姓名和研究方向信息。提示:先设计一个学生类student,用于描述每个研究生的信息,然后再设计一个教师类teacher,用于描述每个 导师的信息。为了使学生和导师建立指导关系,需要在教师类中添加一个学生类student的对象数组,用于表明各个导师的所有研究生信息。编写相应的对所 定义的类的测试程序。
解析:
这道题目的麻烦之处在于让符合条件的学生一个个的归属到相应老师的名下,然后当调用老师的时候,一下子把 学生的信息输出,如果你把这道题单单理解只要输出学生信息,那也就太简单了,也就失去编程的乐趣,这也是我从别人的地方学到的一种对编程的态度和理解,编 程在无关紧要的地方你可以懒惰,可以取巧,但是在原则性的问题上你还是要牢守自己的底线,切不可因小失大啊。
程序:
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
using namespace std;
ofstream out("out.txt");
class student
{string name,subject;
int number;
public:
       student(string n="no name",string  m="no subject")
       {
           static int a=1;
           number=a++;
           name=n;subject=m;
       }
       string sub(){
       return subject;
       }
       void show()
       {
        out<<"学号:"<<number<<'/t'<<"学生姓名:"<< name<<'/t'<<"专业方向:"<<subject<<'/n';
       }
};
class teacher
{
    string name,subject;
    vector<student> s;
public:   
    teacher(string n="no name",string m="no subject")
       {
        name=n;subject=m;
        cout<<"老师姓名:"<<name<<'/t'<<"专业方向:"<<subject<<'/n';
       }
    string sub(){
    return subject;
    }
    void show()
       {
        out<<"老师姓名:"<<name<<'/t'<<"专业方向:"<<subject<<'/n';
        for(int i=0;i<s.size();i++)
        {
            s[i].show();
        }
       }
    void add(student t){
        s.push_back(t);
      }
};
void main(){
    string a,b,c,d,e,f,g,h;
    int x;
    ifstream in("in.txt");
    in>>x;
    in>>c>>d>>e>>f>>g>>h;
    teacher m(c,d);
    teacher n(e,f);
    teacher o(g,h);
    cout<<"/n";
    for(int i=1;i<=x;i++)
    {   
        in>>a>>b;
        student s(a,b);
        if(s.sub()==m.sub())
            m.add(s);
        else if(s.sub()==n.sub())
            n.add(s);
        else if(s.sub()==o.sub())
            o.add(s);
        else
            cout<<"对不起,您的输入错误!"<<"/n";
    }
    m.show();
    n.show();
    o.show();
}
也 许有人一看这个程序就发现了,这个程序是需要使用文件的,这也是这个程序的有趣之处,但是使用文件的出发点确实因为我的懒惰,因为实验课上需要把程序给老 师看,我又不想一次次输入信息,这是没有意义的,我们要把时间留给有意义的事情,不是吗?比如睡觉······当然,使用文件还有一个好处就是你可以把大 量信息一次性的输入,同样,这个程序的结果也是输到文件中,你还能改变文件的输出路径,把程序结果放到任何你想要方的文件夹中,奇妙吧!呲牙(自恋中)这个程序还有个个人喜欢的地方就是红字部分,使用了向量,一种很奇妙的东西,不用让你把精力耗费在怎么动态分配空间中,向量帮你解决了这个问题,也非常好用。