C ++如何知道要使用哪个属性

时间:2015-12-19 02:45:12

标签: c++

我有下面不完整的课程(但必要的是了解我的关注)。 以下方法是复制给定包的内容(在我的代码中称为sac

template <class T, int capInitial>
Sac<T,capInitial>& Sac<T,capInitial>::
        operator+=(Sac &b) {

    for(int i=0; i<b.getTaille(); i++){
        *this += b.sac[i];  //LINE i DON'T UNDERSTAND
    }

    return *this;
}

由于以下类具有2个属性且数组为pointer。在上面提到的行中,什么机制能够获取给定argument中的所有元素,并通过*this+=b.sac[i]将其添加到类的数组中,我将以下列方式完成它

for(int i=0; i<b.getTaille(); i++){
    sac[taille++]= b.sac[i];

或许有些事情我不太明白?这是不完整的类

 template <class T, int capInitial>
    class IterateurSac;

    template <class T, int capInitial=64>
    class Sac {

    private:

        T* sac;
        int taille;
        int capacite;


        std::default_random_engine generator;
        std::uniform_int_distribution<int> distribution;

        void augmenterCapacite(int cap);
        void copier(const Sac &b);

    public:

        Sac() : taille(0), capacite(capInitial), generator(7437843) {
            sac= new T[capacite];
        }

template <class T, int capInitial>
Sac<T,capInitial>& Sac<T,capInitial>::
        operator+=(const T &element) {

    if (taille==capacite)
        augmenterCapacite(2*capacite);

    sac[taille++]= element;

    return *this;
}
    }

1 个答案:

答案 0 :(得分:0)

在C ++中,您可以为运营商创建自己的行为。您的类需要重载operator+=才能使其工作,该函数将命名要修改的成员变量。

确实,我们可以从您的第一个代码段看到该类已经重载operator+=以获取类型为Sac<T,capInitial>&的参数;它必须有另一个参与类型为T(或兼容)的参数。

为什么您稍后向我们展示的类定义不包含这些函数的声明的原因尚不清楚。