作业2-类与对象(初)

 1 #include <iostream>
 2 #include <string>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <sstream>
 6 #include <cstdlib>
 7 using namespace std;
 8 /*实现一个学生信息处理程序,计算一个学生的四年平均成绩。
 9 
10 要求实现一个代表学生的类,并且类中所有成员变量都是【私有的】。
11 
12 补充下列程序中的 Student 类以实现上述功能。
13 */ 
14 //注意是除以4.0 
15 class Student {
16 // 在此处补充你的代码
17     private:
18         string name;
19         int age;
20         int stunum;
21         int y1,y2,y3,y4;
22         double avr;
23     public:
24         void input(){
25             //如何处理一个AB CDE,12,13,1234这样的字符串 
26             getline(cin,name,',');
27             scanf("%d,%d,%d,%d,%d,%d",&age,&stunum,&y1,&y2,&y3,&y4);
28         }
29         void calculate(){
30             avr = (y1+y2+y3+y4)/4.0;
31         }
32         void output(){
33             cout<<name<<","<<age<<","<<stunum<<","<<avr<<endl;
34         }
35 };
36 
37 int main() {
38     Student student;        // 定义类的对象
39     student.input();        // 输入数据
40     student.calculate();    // 计算平均成绩
41     student.output();       // 输出数据
42 }

备注:这道题有两个需要注意的地方。一个是double变量运算时要至少有一个变量是double,比如4.0。还有一个就是利用getline可以指定分隔符这个功能来获得包含空格的名字,再利用scanf来获得后面用逗号分隔的数字。

#include <iostream>
using namespace std;
//程序填空,使其输出9 22 5 
class Sample {
public:
    int v;
// 在此处补充你的代码
    Sample(int vv=0){v=vv;}//构造函数,参数可缺省 
    Sample(const Sample &a){ //注意这里需要是常量引用 (只要不会改就都用常量) 
        v = a.v+2;
    }
};
void PrintAndDouble(Sample o)
{
    cout << o.v;
    cout << endl;
}
int main()
{
    Sample a(5);
    Sample b = a; //这里调用了一次复制构造函数 
    PrintAndDouble(b); //这里又调用了一次 
    Sample c = 20; //这里调用了以整型为参数的构造函数 
    PrintAndDouble(c); //调用 
    Sample d;
    d = a;
    cout << d.v;
    return 0;
}

备注:这道题充分让我熟悉了构造函数和复制构造函数的使用。要注意Sample b = a调用的是复制构造函数,Sample c = 20调用了以整型为参数的构造函数。还有就是复制构造函数如果不涉及到修改值就加const。

 1 /*下面程序的输出是:
 2 3+4i
 3 5+6i
 4 请补足Complex类的成员函数。不能加成员变量。
 5 */ 
 6 #include <iostream>
 7 #include <cstring>
 8 #include <cstdlib>
 9 using namespace std;
10 class Complex {
11 private:
12     double r,i;
13 public:
14     void Print() {
15         cout << r << "+" << i << "i" << endl;
16     }
17 // 在此处补充你的代码
18     Complex(const char a[]){
19         r = a[0]-'0';
20         i = a[2]-'0'; 
21     } 
22     Complex(){}//重载 
23 };
24 int main() {
25     Complex a;
26     a = "3+4i"; a.Print();
27     a = "5+6i"; a.Print();
28     return 0;
29 }

备注:这道题就是一个简单的构造函数的重载。要注意的就是如果自己写了一个有参的构造函数,但主函数里还有要用到无参构造函数的地方,要自己再补写一个无参构造函数。

posted @ 2020-03-02 19:20  timeaftertime  阅读(251)  评论(0编辑  收藏  举报