永发信息网

c++哪里错了

答案:1  悬赏:20  手机版
解决时间 2021-05-23 00:02
  • 提问者网友:献世佛
  • 2021-05-22 00:04

#include<iostream.h>
class student{
private:
char Name[5];
int Maths;
float Average;
int Summtion;
public:
student(char InNam[5],int InMat,float InAve,int InSum);
output();
};
student::student(char InNam[5],int InMat,float InAve,int InSum){
Name[5]=InNam[5];
Maths=InMat;
Average=InAve;
Summtion=InSum;
}
student::output(){
cout<<"姓名"<<"数学"<<"平均"<<"总和"<<endl;
cout<<Name[5]<<Maths<<Average<<Summtion<<endl;
}

void main(){
char InNam[5]="adfgh";
int InMat=76;
float InAve=43;
int InSum=44;
student stu[50];
stu[0](InNam,InMat,InAve,InSum);

stu[0].output();
}

最佳答案
  • 五星知识达人网友:英雄的欲望
  • 2021-05-22 00:14

两个问题:


1.字符串数组在最后会增加一个字符串结束符'\0',所以数组长度要比实际字符串多1.


2.类数组的初始化必须.在定义数组时才会调用构造函数.定义完成后用数组元素调用构造函数是不行的.



具体见如下代码.


#include <iostream.h>
#include <string.> //因为用到strcpy函数. 所以包含该头文件.
class student{
private:
char Name[5];
int Maths;
float Average;
int Summtion;
public:
student(){}
student(char InNam[5],int InMat,float InAve,int InSum);
output();
};


student::student(char InNam[5],int InMat,float InAve,int InSum){
// Name[5]=InNam[5]; //这样只是将字符串数组的最后一个元素赋值给Name的最后一个元素.
strcpy(Name,InNam); //这样才是将InNam整个字符串赋值给Name.
Maths=InMat;
Average=InAve;
Summtion=InSum;
}
student::output(){
cout<<"姓名"<<"数学"<<"平均"<<"总和"<<endl;
cout<<Name<<Maths<<Average<<Summtion<<endl;
}


void main(){
char InNam[5]="adfg"; //字符串初始化时,会在结尾增加一个字符串结束符'\0',所以长度应该比字符串多1.
int InMat=76;
float InAve=43;
int InSum=44;


student stu[50]; //缺少无参构造函数.
// stu[0](InNam,InMat,InAve,InSum); //构造函数不是这么用的... 所谓构造函数,顾名思义是在定义对象的时候调用的.

//提供两个数组赋值的方法.


//方法1:用一个类对象去初始化一个类数组元素.
student stu1(InNam,InMat,InAve,InSum);
stu[0]=stu1;
stu[0].output();


//方法2:在定义数组时直接将每个元素的值传递给构造函数初始化.
student stu2[50]={student(InNam,InMat,InAve,InSum)};
stu2[0].output();


}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯