注册 登录
编程论坛 C++教室

类的继承问题

liu200909 发布于 2009-12-26 16:29, 1115 次点击
要求设计一个基类:Person,作为学生类Student、教师类Teacher的基类,学生类中有编号、姓名、班号、成绩,
其中班号和成绩的输入和显示在Student中实现,教师数据中有编号、姓名、职称、部门,其中职称和部门的输入和显示
在Teacher类中实现,下面给出基类的成员:
Person类:
       private:
             int  no; //编号
             char name[10]; //姓名
       public:
             void input();//编号和姓名的输入
             void diaplay();//编号和姓名的输出


请各位高手帮帮忙啊  谢谢了!
10 回复
#2
missiyou2009-12-26 17:15
Person
#3
guchao20092009-12-26 17:41
/*要求设计一个基类:Person,作为学生类Student、教师类Teacher的基类,学生类中有编号、姓名、班号、成绩,
其中班号和成绩的输入和显示在Student中实现,教师数据中有编号、姓名、职称、部门,其中职称和部门的输入和显示
在Teacher类中实现,下面给出基类的成员:
Person类:
       private:
             int  no; //编号
             char name[10]; //姓名
       public:
             void input();//编号和姓名的输入
             void diaplay();//编号和姓名的输出
*/


#include<iostream>
#define maxsize 10

using namespace std;
class person
{
private:
    int  no; //编号
    char name[maxsize]; //姓名
public:
    person()//编号和姓名的输入
    {
        cout<<"执行构造函数person"<<endl;
        cout<<"请输入编号:"<<endl;
        cin>>no;
        cout<<"请输入姓名:"<<endl;
        cin>>name;
    }
    void ashow()//编号和姓名的输出
    {
        cout<<"您输入的编号:"<<endl;
        cout<<no;
        cout<<"您输入的姓名:"<<endl;
        cout<<name;
    }
};

class student:public person
{
private:
    char num[maxsize]; //班号
    int  score;//分数
public:
    student():person()
    {
        cout<<"执行构造函数student"<<endl;
        cout<<"请输入班号:"<<endl;
        cin>>num;
        cout<<"请输入分数:"<<endl;
        cin>>score;
    }
    void bshow()
    {
        ashow();
        cout<<"您输入班号:"<<endl;
        cout<<num;
        cout<<"您输入分数:"<<endl;
        cout<<score;
    }
};

class teacher:public person
{
private:
    char title[maxsize];//   职称
    char department[maxsize]; //部门
public:
    teacher():person()
    {
        cout<<"执行构造函数teacher"<<endl;
        cout<<"请输入职称:"<<endl;
        cin>>title;
        cout<<"请输入部门:"<<endl;
        cin>>department;
    }
    void cshow()
    {
        ashow();
        cout<<"您输入的职位:"<<endl;
        cout<<title;
        cout<<"您输入的部门:"<<endl;
        cout<<department;
    }
};

void main()
{
    person p1();
    p1.ashow();
    cout<<"/////////////////////////////////////////////"<<endl;
    cout<<"/////////////////////////////////////////////"<<endl;
    cout<<"------------------------学生资料------------------------"<<endl;
    student s1();
    s1.bshow();
    cout<<"/////////////////////////////////////////////"<<endl;
    cout<<"/////////////////////////////////////////////"<<endl;
    cout<<"------------------------老师资料------------------------"<<endl;
    teacher t1();
    t1.cshow();
}


我写了下不过有点问题,我也不知道,想请教其他人············
#4
guchao20092009-12-26 18:07
正确解答是:
/*要求设计一个基类:Person,作为学生类Student、教师类Teacher的基类,学生类中有编号、姓名、班号、成绩,
其中班号和成绩的输入和显示在Student中实现,教师数据中有编号、姓名、职称、部门,其中职称和部门的输入和显示
在Teacher类中实现,下面给出基类的成员:
Person类:
       private:
             int  no; //编号
             char name[10]; //姓名
       public:
             void input();//编号和姓名的输入
             void diaplay();//编号和姓名的输出
*/


#include<iostream>
#define maxsize 10

using namespace std;
class person
{
private:
    int  no; //编号
    char name[maxsize]; //姓名
public:
    person()//编号和姓名的输入
    {
        cout<<"执行构造函数person"<<endl;
        cout<<"请输入编号:"<<endl;
        cin>>no;
        cout<<"请输入姓名:"<<endl;
        cin>>name;
    }
    void ashow()//编号和姓名的输出
    {
        cout<<"您输入的编号:"<<endl;
        cout<<no;
        cout<<"您输入的姓名:"<<endl;
        cout<<name;
    }
};

class student:public person
{
private:
    char num[maxsize]; //班号
    int  score;//分数
public:
    student():person()
    {
        cout<<"执行构造函数student"<<endl;
        cout<<"请输入班号:"<<endl;
        cin>>num;
        cout<<"请输入分数:"<<endl;
        cin>>score;
    }
    void bshow()
    {
        ashow();
        cout<<"您输入班号:"<<endl;
        cout<<num;
        cout<<"您输入分数:"<<endl;
        cout<<score;
    }
};

class teacher:public person
{
private:
    char title[maxsize];//   职称
    char department[maxsize]; //部门
public:
    teacher():person()
    {
        cout<<"执行构造函数teacher"<<endl;
        cout<<"请输入职称:"<<endl;
        cin>>title;
        cout<<"请输入部门:"<<endl;
        cin>>department;
    }
    void cshow()
    {
        ashow();
        cout<<"您输入的职位:"<<endl;
        cout<<title;
        cout<<"您输入的部门:"<<endl;
        cout<<department;
    }
};

void main()
{
    cout<<"/////////////////////////////////////////////"<<endl;
    cout<<"//////////////////////////////////////////////"<<endl;
    person p1;
    p1.ashow();
    cout<<endl;
    cout<<"/////////////////////////////////////////////"<<endl;
    cout<<"/////////////////////////////////////////////"<<endl;
    cout<<"------------------------学生资料------------------------"<<endl;
    student s1;
    s1.bshow();
    cout<<endl;
    cout<<"/////////////////////////////////////////////"<<endl;
    cout<<"/////////////////////////////////////////////"<<endl;
    cout<<"------------------------老师资料------------------------"<<endl;
    teacher t1;
    t1.cshow();
    cout<<endl;
}
#5
liu2009092009-12-26 20:56
回复 4楼 guchao2009
楼上回答的不错,但是有点问题的是,不符合题目的要求,要求用input()函数来输入要输入的数据,没有说明用构造函数,
请楼上的兄弟再帮忙看哈!谢谢!
#6
wlsj2009-12-26 21:38
菜鸟,学习了
#7
missiyou2009-12-27 16:17
那么多code    都错了
#8
guchao20092009-12-27 17:15
为什么非不要构造函数呢?
既然用到了类建议用构造函数。
如果不用你自己先仿造四楼的我写下,格式是一样的。
不懂在问!!!!!


版主四楼的哪个地方的代码错了希望指出····Thank you!
#9
liu2009092009-12-28 11:16
回复 8楼 guchao2009
要安照题目的要求来啊,兄弟们!!题目是这样的,没有办法啊!!!!
#10
missiyou2009-12-28 09:18
也不能说你不对。
不过觉得出这个题目不怎么好。


#include "stdafx.h"
/*
 * 要求设计一个基类:Person,作为学生类Student、教师类Teacher的基类,学生类中有编号、姓名、班号、成绩,
 * 其中班号和成绩的输入和显示在Student中实现,教师数据中有编号、姓名、职称、部门,其中职称和部门的输入和显示
 * 在Teacher类中实现,下面给出基类的成员:
 * Person类:
       private:
             int  no; //编号
             char name[10]; //姓名
       public:
             void input();//编号和姓名的输入
             void diaplay();//编号和姓名的输出
 */

#include <iostream>
using namespace std;
class Person
{
public:   
    char name[20];
    int  m_id;
    Person()
    {
        memset(name,0,20);
        m_id = 0;
    }
    ~Person()
    {
        memset(name,0,20);
    }
    virtual void input()
    {
        
        cin >> name; cin >> m_id;
    }
    virtual void display()
    {
        cout << name << m_id <<endl;
    }
   
};
class Student :public Person
{
private:

    int  classNum;
    float score;
public:
    Student():classNum(0),score(0.0)
    {

    }
    void input()
    {
        Person::input();
        cin >> classNum >> score;
    }

    void display()
    {
        Person::display();
        cout <<classNum <<score <<endl;

    }


};
class Teacher: public Person
{
private:
    char title[20];
    char door[20];
public:
    Teacher()
    {
        memset(title, 0, 20);
        memset(door, 0, 20);
    }
    ~Teacher()
    {
        memset(title, 0, 20);
        memset(door, 0, 20);

    }
    void input()
    {
        Person::input();
        cin >> title ;
        cin >> door;
    }

    void display()
    {
        Person::display();
        cout <<title <<door<<endl;

    }

};


int _tmain(int argc, _TCHAR* argv[])
{
    Student wnag;

    wnag.display();
    while (1);
   
   
    return 0;
}

#11
missiyou2009-12-29 08:53
晕,我早就知道用种方法,之所数据继承,是因为,只要输入班级和分数,那么名字和编号肯定在父类里了。。又看了题目。感觉还是下面这种方法最好,也是正确的。烦死了,
什么人啊,出题目也不搞清楚,真是的。


#include "stdafx.h"
/*
* 要求设计一个基类:Person,作为学生类Student、教师类Teacher的基类,学生类中有编号、姓名、班号、成绩,
* 其中班号和成绩的输入和显示在Student中实现,教师数据中有编号、姓名、职称、部门,其中职称和部门的输入和显示
* 在Teacher类中实现,下面给出基类的成员:
* Person类:
       private:
             int  no; //编号
             char name[10]; //姓名
       public:
             void input();//编号和姓名的输入
             void diaplay();//编号和姓名的输出
*/

#include <iostream>
using namespace std;
class Person
{
public:   
  
    virtual void input()
    {
        

    }
    virtual void display()
    {

    }
   
};
class Student :public Person
{
private:
char name[20];
    int  m_id;
    int  classNum;
    float score;
public:
    Student():classNum(0),score(0.0)
    {
memset(name,0,20);
        m_id = 0;

    }
    void input()
    {
        cin >> name; cin >> m_id;
        cin >> classNum >> score;
    }

    void display()
    {
        cout << name << m_id <<endl;
        cout <<classNum <<score <<endl;

    }


};
class Teacher: public Person
{
private:
char name[20];
    int  m_id;
    char title[20];
    char door[20];
public:
    Teacher()
    {
        memset(title, 0, 20);
        memset(door, 0, 20);
memset(name,0,20);
        m_id = 0;
    }
    ~Teacher()
    {
        memset(title, 0, 20);
        memset(door, 0, 20);

    }
    void input()
    {
        cin >> name; cin >> m_id;

        cin >> title ;
        cin >> door;
    }

    void display()
    {
        cout << name << m_id <<endl;
        cout <<title <<door<<endl;

    }

};


int _tmain(int argc, _TCHAR* argv[])
{
    Student wnag;

    wnag.display();
    while (1);
   
   
    return 0;
}


[ 本帖最后由 missiyou 于 2009-12-29 15:03 编辑 ]
#12
debroa7232009-12-29 12:23
构造函数是初始化数据的地方,最好不要去写逻辑代码,否则在大工程中,会伤地很痛。
1