| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 526 人关注过本帖
标题:求教高人!!!一个c++关于继承的问题望帮助~
只看楼主 加入收藏
hancycrystal
Rank: 2
等 级:论坛游民
帖 子:8
专家分:10
注 册:2010-8-31
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:5 
求教高人!!!一个c++关于继承的问题望帮助~
刚学C++不久,遇到问题不知如何修改,源代码如下,望高手赐教
#include"stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class person{
protected:
    char *name;
    int id;
public:
    person(char *n,int i){
    name=new char[strlen(n)+1];
    strcpy(name,n);
    id=i;
    }
    void display(){
        cout<<"人名:"<<name<<"身份证:"<<id<<endl;
    }
    ~person(){ delete name;}
};
class teacher:virtual public person{
public:
    teacher(char *n,int i,char *d1,char *d2):person(n,i){
    degree=new char[strlen(d1)+1];
    strcpy(degree,d1);
    dep=new char[strlen(d2)+1];
    strcpy(dep,d2);
    }
    void display(){
        person::display();
        cout<<endl;
        cout<<"学历:"<<degree<<"部门:"<<dep<<endl;
    }
protected:
    char *degree;
    char *dep;
};
class student:virtual public person{
public:
    student(char *n,int i,int age,int s):person(n,i){
        old=age;
        sno=s;
        }
    void display(){
        person::display();
        cout<<endl;
        cout<<"年龄:"<<old<<"学号:"<<sno<<endl;
    }
protected:
    int old;
    int sno;
};
class stud{
protected:
    char *addr;
    char *tel;
public:
    stud(char *a,char *t){
    addr=new char[strlen(a)+1];
    strcpy(addr,a);
    tel=new char[strlen(t)+1];
    strcpy(tel,t);
    }
    void display(){
        cout<<"住址:"<<addr<<"电话:"<<tel<<endl;
    }
};
class score:public stud,public student{
public:
    score(float m,float e):stud(),student(){
        math=m;
        eng=e;
    }
    void display(){
        cout<<"数学:"<<math<<"英语:"<<eng<<endl;
    }   
protected:
    float math;
    float eng;

}
int main(){
teacher t1("笑",1218,"本科","财大");
score c1(78.5,80.0);
t1.display();
c1.display();
}
搜索更多相关主题的帖子: 高人 继承 
2010-11-17 20:32
zhanghang123
Rank: 2
等 级:论坛游民
帖 子:39
专家分:24
注 册:2010-3-20
收藏
得分:0 
你的头文件#include"stdafx.h"是怎么写的?
2010-11-17 23:48
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:5 
你好。
我看了一下你的代码。有这样几个问题:
1、在score类的声明结束位置少了一个分号。
2、person类、student类、stud类根本没有不带参数的(默认)构造函数,所以你在score类的构造函数引用stud和student的默认构造函数,所以肯定会编译失败。

解决办法:
1、给person类、student类、stud类添加默认的构造函数。
2、在score类中,引用student和stud类的带参数构造函数。
程序代码:
//#include"stdafx.h"
#include <iostream>
#include <string>

using namespace std;

class person
{
protected:
    char *name;
    int id;
public:
    person(char *n, int i)   
    {
        name=new char[strlen(n)+1];
        strcpy(name,n);
        id=i;
    }
    person() /*!!给person构造函数添加默认的参数!!*/
    {
        char * noneName_Tel = "None";
        name=new char[strlen(noneName_Tel)+1];
        strcpy(name,noneName_Tel);
        id=0;
    }
   
    void display()
    {
        cout<<"人名:"<<name<<"身份证:"<<id<<endl;
    }
    ~person(){ delete name;}
};

class teacher:virtual public person
{
public:
    teacher(char *n,int i,char *d1,char *d2):person(n,i)
    {
        degree=new char[strlen(d1)+1];
        strcpy(degree,d1);
        dep=new char[strlen(d2)+1];
        strcpy(dep,d2);
    }
   
    void display()
    {
        person::display();
        cout<<endl;
        cout<<"学历:"<<degree<<"部门:"<<dep<<endl;
    }
protected:
    char *degree;
    char *dep;
};

class student:virtual public person
{
public:
    student(char *n = 0,int i = 0, int age = 0, int s = 0):person(n,i)    /*!!给stud构造函数添加默认的参数,视具体情况改之!!*/
    {
        old=age;
        sno=s;
    }
   
    void display()
    {
        person::display();
        cout<<endl;
        cout<<"年龄:"<<old<<"学号:"<<sno<<endl;
    }
protected:
    int old;
    int sno;
};

class stud
{
protected:
    char *addr;
    char *tel;
public:
    stud(char *a,char *t)   
    {
        addr=new char[strlen(a)+1];
        strcpy(addr,a);
        tel=new char[strlen(t)+1];
        strcpy(tel,t);
    }
   
    /*!!给stud构造函数添加默认的参数,视具体情况改之!!*/
    stud()
    {
        char * noneName_Tel = "None";
        addr=new char[strlen(noneName_Tel)+1];
        strcpy(addr,noneName_Tel);
        tel=new char[strlen(noneName_Tel)+1];
        strcpy(tel,noneName_Tel);
    }

    void display()
    {
        cout<<"住址:"<<addr<<"电话:"<<tel<<endl;
    }
};

class score:public stud,public student
{
public:
    //2、 修改这里,引用stud和student类的带参数的构造函数
    score(float m,float e):stud( "美国纽约", "911"),student( "杰森.斯坦森", 1, 35, 001)
    {
        math=m;
        eng=e;
    }

    void display()
    {
        cout<<"数学:"<<math<<"英语:"<<eng<<endl;
    }   
protected:
    float math;
    float eng;

};        /*!!之前你的代码少了一个分号!!*/

int main()
{
    teacher t1("",1218,"本科","财大");
    score c1(78.5,80.0);
    t1.display();
    c1.display();

    return 0;
} 
2010-11-18 16:20
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
楼上说的很详细!

南国利剑
2010-11-18 18:46
hancycrystal
Rank: 2
等 级:论坛游民
帖 子:8
专家分:10
注 册:2010-8-31
收藏
得分:0 
回复 3楼 zhoufeng1988
十分感谢~
2010-11-18 18:59
VenusNefu
Rank: 2
等 级:论坛游民
帖 子:14
专家分:11
注 册:2010-11-24
收藏
得分:0 
同意三楼的
2010-11-24 12:17
快速回复:求教高人!!!一个c++关于继承的问题望帮助~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026263 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved