解释C ++代码

时间:2015-03-17 17:56:04

标签: c++ c++11

我可以帮助解释以下代码吗?

#include <iostream>

class Vector {
    private:
        double∗ elem; // pointer to the elements
        int sz;       // the number of elements
    public:
        Vector(int s) :elem{new double[s]}, sz{s} { }
        double& operator[](int i) { return elem[i]; }
        int size() { return sz; }
};

我正在努力提高我的C ++知识,但这种语法对我来说似乎很新鲜。

更具体地说,public下的代码。

3 个答案:

答案 0 :(得分:4)

可能它是新的C ++ 11初始化列表让您感到困惑,您现在可以用大括号{}初始化变量。例如:

int i{42};
std::vector<int> v{1, 2, 3, 4};

代码中的其他所有内容在C ++ 11之前看起来非常标准

答案 1 :(得分:0)

Vector(int s)定义了一个构造函数 - 一个在创建对象时调用的特殊方法。

:elem{new double[s]}, sz{s}是初始化列表 - 它初始化对象的字段。整个部分:

Vector(int s):elem{new double[s]}, sz{s} {}

相同
Vector(int s) {    
elem = new double[s];
sz = s;
}

但是,初始化列表可用于初始化常量和引用。

答案 2 :(得分:0)

Vector(int s) :elem{new double[s]}, sz{s} { }

它是构造函数。它需要一个int参数来实例化。

elem{new double[s]}, sz{s} { }

本部分介绍如何启动成员变量。一个名为elem的数组类型。 emem有“s”长度数组。 sz设为“s”。

double& operator[](int i) { return elem[i]; }

这部分是为了按元素索引进行访问。

Vector v(1);
return v[0]; // <= return double reference

我将分享一个例子。这是由Bjarne Stroustrup撰写的C ++编程语言(第4版)中介绍的

#include <iostream>

using namespace std;

class Vector{
    public:
        Vector(int s) :elem{ new double[s]}, sz{s} {}
        double& operator[](int i) { return elem[i]; }
        int size() { return sz; }
    private:
        double* elem;
        int sz;
};

double read_and_sum(int s)
{
    Vector v(s);
    for (int i=0; i!=v.size(); ++i)
        cin >> v[i];

    double sum = 0;
    for (int i=0; i!=v.size(); ++i)
        sum += v[i];

    return sum;
}

int main() {
    int sum = read_and_sum(3);
    cout << sum << endl;
}