2016-05-22 56 views
-3

在这段代码中,我无法理解vecor是如何初始化的?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

Student构造函数中,std::vector<int> testScores经由使用传递给Student构造的scores参数的内容赋值运算符(复制分配在这种情况下)初始化。

顺便说一句,这是更好地传递scores(和std::string参数)通过常量引用的Student构造,以避免不必要的复制:

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

如何vecor被初始化?

它的默认隐式初始化(​​即由默认构造函数初始化)。为了完整,它首先默认初始化,然后在构造函数的主体中复制赋值。

更有效的方法是使用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) 
    { 
    } 
    ... 
}; 

它现在复制初始化(即由复制构造函数初始化)。