回 帖 发 新 帖 刷新版面

主题:C++

 

#include<iostream.h>
#include<stdlib.h>
#include<string.h>


class CPerson
{
   private:
    char name[5];
    char num[8];
   public:
    CPerson()
    {}
    CPerson(char *na,char *nu)
    {
           strcpy(name,na);
     strcpy(num,nu);
    }
    void output()
    {
       cout<<"学生姓名:"<<name<<endl;
    cout<<"学生学号:"<<num<<endl;
    }
    ~CPerson()
    {
    }

};
class CScore:public CPerson
{
   private:
    int na;
    int nb;
    int nc;
    CPerson stu;
   public:
    CScore()
    {}

       CScore(int x,int y,int z)
    {
       na=x;nb=y;nc=z;
    }
       void xutput()
    {   
     // CScore w;
          //  stu=w.stu;
   stu.output();
     cout<<"学生成绩:"<<na<<"    "<<nb<<"    "<<nc<<endl;   
    }
    ~CScore()
    {}

 

};

 


int main()
{
  CPerson a("fu","110800");
  CScore  b(88,89,90);
  a.output();
  b.xutput();
 return 0;
}

但是执行结果却是如上图一样,在第一类中输出正常为什么在第二个类中就会出现乱码呢,请问有哪位大神知道的指点一下:


回复列表 (共6个回复)

沙发

楼主你的第二个类有一个CPerson对象,没有初始化就输出
可以在第一个类中将CPerson构造函数改成这样
CPerson()
{
strcpy(name,"Unknown");
strcpy(num,"Unknown");
}

板凳


好像 还是不行啊

3 楼

你的数组太小了,"Unknown"会使name[5]越界,改大一点,或者把"Unknown"改成"Unk"

4 楼

你在cscore内中构造函数不对
CScore(Cperson a,int x,int y,int z):stu(a)
{
na=x;nb=y;nc=z;
}
将主函数中 CScore b(88,89,90);
改为 CScore b(a,88,89,90);

5 楼

楼主,你的派生类的构造函数初始化写错了。有两种改法:a)四楼正解; b)第二种改法: #include #include #include class CPerson { private: char name[5]; char num[8]; public: CPerson() {} CPerson(char *na,char *nu) { strcpy(name,na); strcpy(num,nu); } void output() { cout<<"学生姓名:"<

6 楼


[em12][em12]



选择千锋 选择卓越 千锋3G 手机软件开发培训第一品牌

[url=http://www.mobiletrain.org/]iOS培训[/url] [url=http://www.mobiletrain.org/]北京iOS培训[/url]

我来回复

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