回 帖 发 新 帖 刷新版面

主题:[原创]【求助】有关于虚函数的问题,没有语法错误,但是连接出错


        

好像是虚函数出问题,可是检查不出,贴上来请高手看看

        [code=c]
#include<iostream.h>
#include<string.h>
#include<stdlib.h>

class CPerson
{
public:
    CPerson() {}
    char Name[10];//姓名
    char ID[20];//身份证
    CPerson *next;//下个结点指针
    virtual void Print();
    virtual void Edit(char*,char*,float,float,float);
};
CPerson *head;



class CTeacher:public CPerson
{
    int Classes;//课时
    float BWages;//基本工资
    float AWages;//总工资
public:
    CTeacher() {}
    void Edit(char *name,char *id,float classes,float wages,float a)
    {strcpy(Name,name);strcpy(ID,id);Classes=(int)classes;BWages=wages;AWages=BWages+(Classes-10)*30;}
    void Print();
};

class CStudent:public CPerson
{
    float Score[3];//3门课成绩
    float Aver;//平均分
    float Amount;//总分
public:
    CStudent() {}
    void Edit(char *name,char *id,float s1,float s2,float s3,float a)
    {strcpy(Name,name);strcpy(ID,id);Score[0]=s1;Score[1]=s2;Score[2]=s3;Amount=s1+s2+s3;Aver=Amount/3.;}
    void Print();
};

class CManager:public CPerson
{
    float BWages;//基本工资
    float AWages;//总工资
    float Bonus;//月奖金
public:
    CManager() {}
    void Edit(char *name,char *id,float wages,float bonus,float a)
    {strcpy(Name,name);strcpy(ID,id);BWages=wages;Bonus=bonus;AWages=BWages+Bonus;}
    void Print();
};

void CTeacher::Print()
{
    cout<<"姓名\t\t身份证\t\t课时\t\t基本工资\t\t总工资"<<endl;
    cout<<Name<<"\t\t"<<ID<<"\t\t"<<Classes<<"\t\t"<<BWages<<"\t\t"<<AWages<<endl;
}

void CStudent::Print()
{
    cout<<"姓名\t\t身份证\t\t成绩1\t\t成绩2\t\t成绩3\t\t总分\t\t平均分"<<endl;
    cout<<Name<<"\t\t"<<ID<<"\t\t"<<Score[0]<<"\t\t"<<Score[1]<<"\t\t"<<Score[2]<<"\t\t"<<Amount<<"\t\t"<<Aver<<endl;
}

void CManager::Print()
{
    cout<<"姓名\t\t身份证\\t\t基本工资\t\t奖金\t\t总工资"<<endl;
    cout<<Name<<"\t\t"<<ID<<"\t\t"<<BWages<<"\t\t"<<Bonus<<"\t\t"<<AWages<<endl;
}

void Add()
{
    int choice,n=1;
    float b,c,s1,s2,s3,x,y;
    char name[10],id[20];
    CPerson *t,*s,*m;

    while(n)
    {
    cout<<"1.添加教师信息2.添加学生信息3.添加行政人员信息"<<endl;
    cout<<"请输入选择:"; cin>>choice;
    switch(choice)
    {
    case 1:t=new CTeacher;
        cout<<"\n请输入姓名:";cin>>name;
        cout<<"请输入身份证号:";cin>>id;
        cout<<"请输入基本课时:";cin>>c;
        cout<<"请输入基本工资:";cin>>b;
        t->Edit(name,id,c,b,0.);
        t->next=head->next;head->next=t;
        cout<<"添加完成,添加的信息为:"<<endl;
        t->Print();
        n=0;
        break;
    case 2:s=new CStudent;
        cout<<"\n请输入姓名:";cin>>name;
        cout<<"请输入身份证号:";cin>>id;
        cout<<"请输入成绩1:";cin>>s1;
        cout<<"请输入成绩2:";cin>>s2;
        cout<<"请输入成绩3:";cin>>s3;
        s->Edit(name,id,s1,s2,s3);
        s->next=head->next;head->next=s;
        cout<<"添加完成,添加的信息为:"<<endl;
        s->Print();
        n=0;
        break;
    case 3:m=new CManager;
        cout<<"\n请输入姓名:";cin>>name;
        cout<<"请输入身份证号:";cin>>id;
        cout<<"请输入基本工资:";cin>>x;
        cout<<"请输入月奖金:";cin>>y;
        m->Edit(name,id,x,y,0.);
        m->next=head->next;head->next=m;
        cout<<"添加完成,添加的信息为:"<<endl;
        m->Print();
        n=0;
        break;
    default:cout<<"输入错误!"<<endl;
    }
    }
}

void Del()
{
    if(head->next==NULL) {cout<<"当前人员库为空!"<<endl;return;}
    CPerson *p=head,*s;
    char keywords[20];
    int choice,n=1;
    while(n)
    {
        cout<<"1.输入姓名查找 2.输入身份证号查找"<<endl;
        cout<<"请输入选择:";cin>>choice;
        switch(choice)
        {
        case 1:cout<<"\n请输入姓名:";cin>>keywords;
            while(s->Name!=keywords&&s!=NULL) {s=p->next;p=s;}
            if(s!=NULL) {p->next=s->next;delete s;cout<<"删除成功!"<<endl;}
            else cout<<keywords<<"不存在!"<<endl;
            n=0;
            break;
        case 2:cout<<"\n请输入身份证号:";cin>>keywords;
            while(s->ID!=keywords&&s!=NULL) {s=p->next;p=s;}
            if(s!=NULL) {p->next=s->next;delete s;cout<<"删除成功!"<<endl;}
            else cout<<keywords<<"不存在!"<<endl;
            n=0;
            break;
        default:cout<<"输入错误!";
        }
    }
}

void Display()
{
    if(head->next==NULL) {cout<<"当前人员库为空!"<<endl;return;}
    CPerson *p=head->next;
    cout<<"当前库中所有的记录为:\n\n"<<endl;
    while(p!=NULL)
    {p->Print(); p=p->next;}
}

void RPrint()
{
    if(head->next==NULL) {cout<<"当前人员库为空!"<<endl;return;}
    CPerson *s=head->next;
    char keywords[20];
    int choice,n=1;
    while(n)
    {
        cout<<"1.输入姓名查找 2.输入身份证号查找"<<endl;
        cout<<"请输入选择:";cin>>choice;
        switch(choice)
        {
        case 1:cout<<"\n请输入姓名:";cin>>keywords;
            while(s->Name!=keywords&&s!=NULL) s=s->next;
            if(s!=NULL) s->Print();
            else cout<<keywords<<"不存在!"<<endl;
            n=0;
            break;
        case 2:cout<<"\n请输入身份证号:";cin>>keywords;
            while(s->ID!=keywords&&s!=NULL) s=s->next;
            if(s!=NULL) s->Print();
            else cout<<keywords<<"不存在!"<<endl;
            n=0;
            break;
        default:cout<<"输入错误!";
        }
    }
}

void Menu()
{
    cout<<"<.=========================学校人员信息管理===========================.>"<<endl;
    cout<<"<.==(1).添加人员信息========"<<endl;
    cout<<"<.==(2).查找人员信息========"<<endl;
    cout<<"<.==(3).删除人员信息========"<<endl;
    cout<<"<.==(4).显示所有人员信息===="<<endl;
    cout<<"<.==(0).退出系统============"<<endl;
    cout<<"\n请输入选择:";
}



void main()
{
    head=new CPerson;head->next=NULL;
    int choice;
    while(1)
    {
        Menu();
        cin>>choice;
        switch(choice)
        {
        case 1:Add();break;
        case 2:RPrint();break;
        case 3:Del();break;
        case 4:Display();break;
        case 0:exit(1);
        }
    }
}
        
    

        
[/code]

回复列表 (共4个回复)

沙发

好吧 自己检查出来了   不劳烦高手了...
虚函数必须定义内容!!!!

板凳

谁说的虚函数必须定义函数体,不仅空函数体可以,没函数体也可以。virtual void foo() = 0; 嘿

3 楼

你那样是纯虚函数...所在类为抽象类...不可实例化...此类里的Name之类的数据成员就不能实现了

4 楼

顶楼主
[url=http://www.bhlt99.com][color=#ffffff]西力士[/color][/url][color=#ffffff] www.bhlt99.com[/color]
[url=http://www.xinliangoil.com][color=#ffffff]希爱力[/color][/url][color=#ffffff]www.xinliangoil.com[/color]
[url=http://www.dl-tomorrow.com][color=#ffffff]万艾可[/color][/url][color=#ffffff]www.dl-tomorrow.com[/color]
[url=http://www.shmideakt.com][color=#ffffff]基因育根[/color][/url][color=#ffffff] www.shmideakt.com[/color]
[url=http://www.senboom.com][color=#ffffff]基因育根[/color][/url][color=#ffffff] www.senboom.com[/color]
[url=http://www.tbrenren.com][color=#ffffff]北京按摩[/color][/url][color=#ffffff] www.tbrenren.com[/color]
[url=http://www.zjjhgjg.com][color=#ffffff]电视棒[/color][/url][color=#ffffff] www.zjjhgjg.com[/color]
[url=http://www.hxww.net][color=#ffffff]超级P57[/color][/url][color=#ffffff] www.hxww.net[/color]
[url=http://www.wzeas.com][color=#ffffff]治疗白发[/color][/url][color=#ffffff]www.wzeas.com[/color]


我来回复

您尚未登录,请登录后再回复。点此登录或注册