値が上書きされてしまう
Q&A
Closed
解決したいこと
3人分のデータを読み込んで出力したいのですが、出力時に最後に入力したデータのみが表示されます。自明なコピーコンストラクタで値の上書きをしてしまっていることが原因だと思うのですが、自分では直せませんでした。
わかる方がいましたらば、回答よろしくお願いします。
条件
コンストラクタ関数で変数の入力を行う
データはStudentというテンプレートクラスのメンバとしてまとめる
発生している問題・エラー
ID>>i1
英語の点数>>10
数学の点数>>20
国語の点数>>30
ID>>i2
英語の点数>>40
数学の点数>>50
国語の点数>>60
ID>>i3
英語の点数>>70
数学の点数>>80
国語の点数>>90
i3 70 80 90 240
i3 70 80 90 240
i3 70 80 90 240
該当するソースコード
1 #include<iostream>
2 #include<string>
3 #include<cstring>
4 #include<iomanip>
5 using namespace std; //名前空間
6
7 template<typename T, int N>
8 class Student{ //テンプレートクラス"Student"の宣言
9 public:
10 T data[N];
11 int eng,math,jan,sum;
12 string ID;
13 public:
14 Student(){ //コンストラクタ
15 //cout << "学生ID:" << ID << "のデータを入力" <<endl;
16 for(int i=0; i<N; i++){
17 cout <<"ID>>";
18 cin >> ID;
19 cout << "英語の点数>>";
20 cin >> eng;
21 cout << "数学の点数>>";
22 cin >> math;
23 cout << "国語の点数>>";
24 cin >> jan;
25 sum = eng+math+jan;
26
27 }
28 }
29
30 Student& operator[](int i){
31 return data[i];
32 }
33
34 void show(){
35 for(int i=0; i<N; i++){
36 cout <<ID<<setw(5)<<eng<<setw(5)<<math<<setw(5)<<jan<<setw(5)<<sum<<endl;
37 }
38 }
39
40 };
41
42
43
44 int main(){
45 int eng,math,jan,sum,age,
46 i;
47 string stID, tcID;
48 double eng_avg=0,
49 math_avg=0,
50 jan_avg=0,
51 sum_avg=0;
52
53 Student<int,3> stu;
54
55 stu.show();
56
57 return 0;
58 }