2016-05-22 13 views
-3

このコードでは、vecorの初期化方法を理解できません。 StudentのコンストラクタにおいてC++:コンストラクタでのベクトルの初期化

class Student : public Person{ 
private: 
    vector<int> testScores; 
public: 

    Student(string firstname,string lastname,int id,vector<int> scores):Person(firstname,lastname,id) 
    { 
      this->testScores=scores; 
    }  
    char calculate() 
    { 
     int sum=0; 
     char result; 
     for(int i=0;i<testScores.size();i++) 
     { 
      sum+=testScores[i]; 
     } 
     int res=sum/testScores.size(); 
     if(res<=100 && res>=90) 
     { 
      result='O'; 
     } 
     else if(res<90 && res>=80) 
     { 
      result='E'; 
     } 

答えて

0

std::vector<int> testScoresStudentコンストラクタに渡さscoresパラメータの内容を使用して、代入演算子(この場合、コピー割付)を介して初期化されます。余談として

、それは不必要なコピーを避けるために、Studentのコンストラクタへのconst参照してscores(およびstd::string引数)を渡す方が良いでしょう:

vecorが初期化された方法
Student(const std::string& firstname, const std::string& lastname, const std::vector<int>& scores) 
    : Person(firstname, lastname) { 
    testScores = scores; // uses copy-assignment to initialise testScores 
} 
0

デフォルトでは暗黙的に初期化されています(デフォルトのコンストラクタで初期化されています)。完全であるためには、最初はデフォルトで初期化されてから、コンストラクタの本体にコピーが割り当てられます。

より効果的な方法はmember initializer listを使用しています。

class Student : public Person { 
private: 
    vector<int> testScores; 
public: 
    Student(string firstname, string lastname, int id, const vector<int>& scores) 
     :Person(firstname, lastname, id), testScores(scores) 
    { 
    } 
    ... 
}; 

これは現在コピーが初期化されています(コピーコンストラクタによって初期化されています)。

関連する問題