C ++:构造函数中的向量初始化

时间:2016-05-22 14:00:59

标签: c++

在这段代码中,我无法理解vecor是如何初始化的?

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';
        }

2 个答案:

答案 0 :(得分:0)

Student的构造函数中,使用传递给{{1的std::vector<int> testScores参数的内容,通过赋值运算符(在本例中为copy-assignment)初始化scores构造函数。

顺便说一句,最好将Student(以及scores args)通过const引用传递给std::string的构造函数,以避免不必要的复制:

Student

答案 1 :(得分: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)
    {
    }  
    ...
};

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