撰写一个学生类,具备学号等属性,并且对各个属性设置相应的成员函数

liang_sz 2009-06-19 10:14:39
要求:
撰写一个学生类,要求学生具备学号、姓名、性别、成绩(平时成绩、考试成绩、期末成绩)等属性,并且对各个属性设置相应的成员函数。值得注意的是,要求提供2种计算学生成绩的方法(①平时成绩占30%,期末占70%; ②平时成绩占40%,期末占60%; )

我写成这样,出错55
请帮忙修改修改,先谢了!



#include "stdafx.h"
#include <iostream.h>
#include <string.h>

class student
{
private:
int s_no; //定义类的数据成员-学号属性
char *s_name; //学生姓名
char *s_sex; //学生性别
int s_num_normal; //学生平时成绩
int s_num_exam; //学生考试成绩
int s_num_all; //学生总成绩

public:
GetS_name();//定义类的函数成员-获取姓名
SetS_name(); //重设姓名

GetS_sex();
SetS_sex();

GetS_num_normal();
SetS_num_normal();

GetS_num_exam();
SetS_num_exam();

GetS_num_all();
SetS_num_all();
ShowS_num_all1();
ShowS_num_all2();

float student::ShowS_num_all1(float s_num_normal,float s_num_exam ){//计算总成绩方法1
cout<<"请输入学生的平时成绩:";
cin>>s_num_normal;

cout<<"请输入学生的考试成绩:";
cin>>s_num_examl;
return s_num_normal*0.3+s_num_exam*0.7;
}

float student::ShowS_num_all2(float s_num_normal,float s_num_exam ){//计算总成绩方法2
cout<<"请输入学生的平时成绩:";
cin>>s_num_normal;

cout<<"请输入学生的考试成绩:";
cin>>s_num_examl;
return s_num_normal*0.4+s_num_exam*0.6;
}

};


int main()
{
student s1; //实例化

s1.ShowS_num_all1();//调用s1的总成绩-计算方法1
s1.ShowS_num_all2();//调用s1的总成绩-计算方法2

return 0;
}
...全文
210 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodname 2009-06-19
  • 打赏
  • 举报
回复
可以倒过来

cout<< s_num_normal*0.4+s_num_exam*0.6;//这里输出,或者将结果先给一个变量.

return s_num_normal*0.4+s_num_exam*0.6; //改为下一句

如果不改,也可以这样

cout<<s1.ShowS_num_all1();//调用s1的总成绩-计算方法1
cout<<s1.ShowS_num_all2();//调用s1的总成绩-计算方法2



liang_sz 2009-06-19
  • 打赏
  • 举报
回复
谢谢大家,
主要是按lingyin55粘的代码:

return s_num_normal*0.4+s_num_exam*0.6;//改为以下
cout<< s_num_normal*0.4+s_num_exam*0.6;
return 0;



结贴!
liang_sz 2009-06-19
  • 打赏
  • 举报
回复
请输入学生的平时成绩:60
请输入学生的考试成绩:80
请输入学生的平时成绩:50
请输入学生的考试成绩:70
Press any key to continue

---------------------
没有返回总成绩,
是否把


return s_num_normal*0.4+s_num_exam*0.6; //改为下一句
cout<< s_num_normal*0.4+s_num_exam*0.6;
goodname 2009-06-19
  • 打赏
  • 举报
回复
类内你重载了2个函数,但是main内你调用的是没有实现的那个.

ShowS_num_all1();
ShowS_num_all2();

float student::ShowS_num_all1(float s_num_normal,float s_num_exam ){//计算总成绩方法1

}

float student::ShowS_num_all2(float s_num_normal,float s_num_exam ){//计算总成绩方法2

}
lingyin55 2009-06-19
  • 打赏
  • 举报
回复
对了 ,你选择rebuild all试试。

[Quote=引用 5 楼 liang_sz 的回复:]
调试报错
Linking...
studant.obj : error LNK2001: unresolved external symbol "public: int __thiscall student::ShowS_num_all2(void)" (?ShowS_num_all2@student@@QAEHXZ)
studant.obj : error LNK2001: unresolved external symbol "public: int __thiscall student::ShowS_num_all1(void)" (?ShowS_num_all1@student@@QAEHXZ)
Debug/studant.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe …
[/Quote]
lingyin55 2009-06-19
  • 打赏
  • 举报
回复
不会吧,我用vs2008调试,除了两个返回类型的警告,没有其它错误,如下

1>------ Rebuild All started: Project: 22, Configuration: Release Win32 ------
1>Deleting intermediate and output files for project '22', configuration 'Release|Win32'
1>Compiling...
1>22.cpp
1>.\22.cpp(43) : warning C4244: 'return' : conversion from 'double' to 'float', possible loss of data
1>.\22.cpp(53) : warning C4244: 'return' : conversion from 'double' to 'float', possible loss of data
1>Linking...
1>Generating code
1>Finished generating code
1>Embedding manifest...
1>Build log was saved at "file://e:\program\csdn\1\22\22\Release\BuildLog.htm"
1>22 - 0 error(s), 2 warning(s)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========


你把我那些头文件改成原来你自己的试试。

[Quote=引用 5 楼 liang_sz 的回复:]
调试报错
Linking...
studant.obj : error LNK2001: unresolved external symbol "public: int __thiscall student::ShowS_num_all2(void)" (?ShowS_num_all2@student@@QAEHXZ)
studant.obj : error LNK2001: unresolved external symbol "public: int __thiscall student::ShowS_num_all1(void)" (?ShowS_num_all1@student@@QAEHXZ)
Debug/studant.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe …
[/Quote]
liang_sz 2009-06-19
  • 打赏
  • 举报
回复
调试报错
Linking...
studant.obj : error LNK2001: unresolved external symbol "public: int __thiscall student::ShowS_num_all2(void)" (?ShowS_num_all2@student@@QAEHXZ)
studant.obj : error LNK2001: unresolved external symbol "public: int __thiscall student::ShowS_num_all1(void)" (?ShowS_num_all1@student@@QAEHXZ)
Debug/studant.exe : fatal error LNK1120: 2 unresolved externals
执行 link.exe 时出错.

studant.exe - 1 error(s), 0 warning(s)

-------------------------------------------
我调试一下你粘上来的,谢谢!
lingyin55 2009-06-19
  • 打赏
  • 举报
回复
这样可以了,你要什么函数再自己添加把。
主要问题是:
1、函数声明和定义不一致
2、成员函数的实现把它放到类外面


#include <iostream>
#include <string.h>
using namespace std;

class student
{
private:
int s_no; //定义类的数据成员-学号属性
char *s_name; //学生姓名
char *s_sex; //学生性别
int s_num_normal; //学生平时成绩
int s_num_exam; //学生考试成绩
int s_num_all; //学生总成绩

public:
//GetS_name();//定义类的函数成员-获取姓名
//SetS_name(); //重设姓名

//GetS_sex();
//SetS_sex();

//GetS_num_normal();
//SetS_num_normal();

//GetS_num_exam();
//SetS_num_exam();

//GetS_num_all();
//SetS_num_all();
float ShowS_num_all1();
float ShowS_num_all2();

};


float student::ShowS_num_all1()//float s_num_normal,float s_num_exam ){//计算总成绩方法1
{
cout<<"请输入学生的平时成绩:";
cin>>s_num_normal;

cout<<"请输入学生的考试成绩:";
cin>>s_num_exam;
return s_num_normal*0.3+s_num_exam*0.7;
}

float student::ShowS_num_all2()
{//float s_num_normal,float s_num_exam ){//计算总成绩方法2
cout<<"请输入学生的平时成绩:";
cin>>s_num_normal;

cout<<"请输入学生的考试成绩:";
cin>>s_num_exam;
return s_num_normal*0.4+s_num_exam*0.6;
}

int main()
{
student s1; //实例化

s1.ShowS_num_all1();//调用s1的总成绩-计算方法1
s1.ShowS_num_all2();//调用s1的总成绩-计算方法2

return 0;
}


lingyin55 2009-06-19
  • 打赏
  • 举报
回复
float student::ShowS_num_all1(float s_num_normal,float s_num_exam ){//
这里的返回值是float,但是你声明的时候没有给返回值float ShowS_num_all1();
「已注销」 2009-06-19
  • 打赏
  • 举报
回复
char *s_name; //学生姓名
char *s_sex; //学生性别
这两个只是指针而已,你要先申请内存。
lori227 2009-06-19
  • 打赏
  • 举报
回复
char *s_name; //学生姓名
char *s_sex; //学生性别

这个改成string 吧!

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧