【2018.3.5】类【无法编译】
今天新学了类,现学现卖改了一个面向过程设计为面向对象,但是dev c++不能编译……这个改得不太对,主函数中子函数的引用方法是错的,因为实在有点复杂……主函数被吃掉了🙃
1 //exam.cpp 2 #include<iostream> 3 #include"exam.h" 4 using namespace std; 5 struct score 6 { 7 string name; 8 float point; 9 }; 10 void exam::fail(score Score[]) 11 { 12 int i,count=0; 13 cout << "不及格的学生为:"; 14 for(i=0;Score[i].point >0;i++) 15 { 16 if(Score[i].point<60) 17 { 18 count++; 19 cout << Score[i].name<<" "; 20 } 21 } 22 cout << endl; 23 cout << "不及格的人数为:"<<count; 24 } 25 26 void exam::exce(score Score[]) 27 { 28 float ave; 29 int sum=0,count=0,i,Count=0; 30 for(i=0;Score[i].point>0;i++) 31 { 32 count++; 33 sum+=Score[i].point; 34 } 35 ave=sum/count; 36 cout << "成绩在平均分及其上的学生为:"; 37 for(i=0;Score[i].point>=0;i++) 38 { 39 if(Score[i].point>=ave) 40 { 41 cout << Score[i].name<<" "; 42 Count++; 43 } 44 } 45 cout << endl; 46 cout << "成绩在平均分及其上的学生人数为:"<<Count<<endl; 47 } 48 49 void exam::per(score Score[]) 50 { 51 float count=0,count_0=0,count_1=0,count_2=0,count_3=0,count_4=0,count_5=0; 52 int i; 53 float per0,per1,per2,per3,per4,per5; 54 for(i=0;Score[i].point>0;i++) 55 { 56 count++; 57 if(Score[i].point<60) 58 count_0++; 59 else if(Score[i].point>=60&&Score[i].point<=69) 60 count_1++; 61 else if(Score[i].point>=70&&Score[i].point<=79) 62 count_2++; 63 else if(Score[i].point>=80&&Score[i].point<=89) 64 count_3++; 65 else if(Score[i].point>=90&&Score[i].point<=99) 66 count_4++; 67 else if(Score[i].point==100) 68 count_5++; 69 } 70 per0=100*count_0/count; 71 per1=100*count_1/count; 72 per2=100*count_2/count; 73 per3=100*count_3/count; 74 per4=100*count_4/count; 75 per5=100*count_5/count; 76 cout << "各分数段的学生人数及所占的百分比:\n"; 77 cout << "第0段:" <<per0<<"%"<<endl; 78 cout << "第1段:" <<per1<<"%"<<endl; 79 cout << "第2段:" <<per2<<"%"<<endl; 80 cout << "第3段:" <<per3<<"%"<<endl; 81 cout << "第4段:" <<per4<<"%"<<endl; 82 cout << "第5段:" <<per5<<"%"<<endl; 83 }
1 //exam.h 2 #include<iostream> 3 class exam 4 { 5 public: 6 void fail(score Score[]); 7 void exce(score Score[]); 8 void per(score Score[]); 9 };
这个是直接用文件联编的方式写的,但是也无法编译……
1 //Tball.h 2 class coordinate 3 { 4 private: 5 float coo_x; 6 float coo_y; 7 float coo_z; 8 float ball_v; 9 float ball_s; 10 float ball_r; 11 public: 12 void setcoo(float,float,float,float); 13 float cal_v(); 14 float cal_s(); 15 void getcoo(); 16 }
1 //Tball.cpp 2 #include<iostream> 3 #include"Tball.h" 4 #define pi=3.1415926; 5 using namespace std; 6 void coordinate::setcoo(float x,float y,float z,float r) 7 { 8 coo_x=x; 9 coo_y=y; 10 coo_z=z; 11 ball_r=r; 12 } 13 14 float coordinate::cal_v() 15 { 16 return ball_v=4/3*pi*ball_r*ball_r*ball_r; 17 } 18 19 float coordinate::cal_s() 20 { 21 return ball_s=4*pi*ball_r*ball_r; 22 } 23 24 void coordinate::getcoo() 25 { 26 cout << "("<<coo_x<<","<<coo_y<<","<<coo_z<<")"; 27 }
1 //main 2 #include <iostream> 3 #include "Tball.h" 4 using namespace std; 5 const float pi=3.1415926; 6 int main() 7 { 8 Tball point; 9 float x,y,z,r; 10 cout << "请输入球心坐标:"<<endl; 11 cout << "x:"<<endl; 12 cin >> x; 13 cout << "y:"<<endl; 14 cin >> y; 15 cout <<"z:"<<endl; 16 cin >> z; 17 cout << "请输入球的半径:"<<endl; 18 cin >> r; 19 point.setcoo(x,y,z,r); 20 cout << "检查:球心坐标为:"; 21 point.getcoo(); 22 cout << endl; 23 cout << "A、求球体体积 B、求球体表面积 请输入操作代码:"<<endl; 24 char code; 25 cin >> code; 26 switch(code) 27 { 28 case'A':cout << "球体体积为:"<<point.cal_v()<<endl;break; 29 case'B':cout << "球体表面积为:"<<point.cal_s()<<endl;break; 30 } 31 while(1) 32 { 33 cout << "请问您还需要进行什么操作吗?(需要请输入“y”,不需要请输入“n”)"<<endl; 34 char ch; 35 cin >> ch; 36 if(ch == 'y') 37 { 38 cout << "请输入:"; 39 cin >> code; 40 switch(code) 41 { 42 case('A'):cout << "球体体积为:"<<point.cal_v()<<endl;break; 43 case('B'):cout << "球体表面积为:"<<point.cal_s()<<endl;break; 44 } 45 } 46 else 47 break; 48 } 49 return 0; 50 }
事实证明,合起来是没问题的。就是多文件联编出问题了……
1 #include <iostream> //用 C++ 语言定义一个三维空间的坐标点 Tpoint;并描述三维空间的球 TBall ,实现其主要操作(如计算体积和表面积,输出空间坐标等)。
//要求:代码分开编写在不同的文件中,以便掌握多文件联编。
2 using namespace std;
3 const float pi=3.1415926;
4 class coordinate
5 {
6 private:
7 float coo_x;
8 float coo_y;
9 float coo_z;
10 float ball_v;
11 float ball_s;
12 float ball_r;
13 public:
14 void setcoo(float,float,float,float);
15 float cal_v();
16 float cal_s();
17 void getcoo();
18 };
19 void coordinate::setcoo(float x,float y,float z,float r)
20 {
21 coo_x=x;
22 coo_y=y;
23 coo_z=z;
24 ball_r=r;
25 }
26
27 float coordinate::cal_v()
28 {
29 return ball_v=(4.0/3.0)*pi*ball_r*ball_r*ball_r;
30 }
31
32 float coordinate::cal_s()
33 {
34 return ball_s=4*pi*ball_r*ball_r;
35 }
36
37 void coordinate::getcoo()
38 {
39 cout << "("<<coo_x<<","<<coo_y<<","<<coo_z<<")";
40 }
41 int main()
42 {
43 coordinate point;
44 float x,y,z,r;
45 cout << "请输入球心坐标:\n";
46 cout << "x:";
47 cin >> x;
48 cout << "y:";
49 cin >> y;
50 cout <<"z:";
51 cin >> z;
52 cout << "请输入球的半径:\n";
53 cin >> r;
54 point.setcoo(x,y,z,r);
55 cout << "检查:球心坐标为:";
56 point.getcoo();
57 cout << endl;
58 cout << "A、求球体体积 B、求球体表面积 请输入操作代码:\n";
59 char code;
60 cin >> code;
61 switch(code)
62 {
63 case'A':cout << "球体体积为:"<<point.cal_v()<<endl;break;
64 case'B':cout << "球体表面积为:"<<point.cal_s()<<endl;break;
65 }
66 while(1)
67 {
68 cout << "请问您还需要进行什么操作吗?(需要请输入“y”,不需要请输入“n”)"<<endl;
69 char ch;
70 cin >> ch;
71 if(ch == 'y')
72 {
73 cout << "请输入:";
74 cin >> code;
75 switch(code)
76 {
77 case('A'):cout << "球体体积为:"<<point.cal_v()<<endl;break;
78 case('B'):cout << "球体表面积为:"<<point.cal_s()<<endl;break;
79 }
80 }
81 else
82 break;
83 }
84 return 0;
85 }
一个晚上好像也没干什么……虚拟机的win7系统到期了,有了上次到期后虚拟机系统文件损坏的经验之后,我就把虚拟机清了清,将下次还要用到的软件安装包压压缩移到iCloud里,又觉得dev不好用,c++代码debug总出错🙃win7系统看着实在不顺眼,就去下了win10的系统映像,顺便发现了visio和vs的mac版,结果vs不会用🙃我觉得新建的项目和文件都没问题,但是项目文件里的原始代码我没看懂……头文件在哪里?(来自一个用了半年多dev c++的小白内心绝望的呼喊)下周回家向我哥请教吧。
又发现了code::blocks的mac版,下载之后忽视掉像素点,但是运行之后要用系统终端,要求……被拒绝?
这是一个历经了无数失败的夜晚,明天也还要爬起来继续面对新的失败。
忽地想起高一时lhl曾对我们说:如果你们在一天的结束之时,想起明天要做的事情就觉得不开心,但是第二天早上起来又觉得要做的事情还挺有意思,那就继续做下去;如果第二天一大早起来还感到绝望,那么我奉劝你,就不要去做它。
当然了,当时老师举的例子是上学。
虽然在高三寒假归来,期初考试三门连环爆,我绝望到晚自习拉着爱豆去走廊尽头看着马路吹风的那个夜晚,我们谈起他,我忽地认识到当初被学生们捧上天的“智慧型男神”其实并没有那么智慧,高学历的光环下言论中确实难见大智慧,更多为自私自利,但他这一句话,至今都是我为人行事的准则之一。
如果不是这句话,我的尝试性选择错误成本将会非常高——没有勇气及时退出当初以尝试来发掘潜力所作出的选择困境。
真是扯远了。