自定义矢量类:总和后无法返回

时间:2014-08-19 23:30:51

标签: c++

this question that I asked yesterday.

相关

我正在构建自己的vector类来学习更多关于C ++的知识,而我在实现一个可以用来添加向量的重载operator+方面遇到了一些困难。这是我班级到目前为止的样子:

template<typename T>
class vector;

template<typename T>
vector<T> operator+(const vector<T>&, const vector<T>&); 

template<typename T>
class vector
{
private:
    T* pointer_;
    unsigned long size_;
public:
    // Constructors and destructors.
    vector();
    template<typename A> vector(const A&);
    template<typename A> vector(const A&, const T&);
    vector(const vector<T>&);
    ~vector();

    // Methods.
    unsigned long size();
    T* begin();
    T* end();
    vector<T>& push_back(const T&); 

    // Operators.
    T operator[](unsigned long);
    vector<T>& operator=(const vector<T>&);
    friend vector<T> operator+<>(const vector<T>&, const vector<T>&);
};

template<typename T>
vector<T> operator+(const vector<T>& lhs, const vector<T>& rhs)
{
    vector<T> result(lhs.size_);
    for (unsigned long i = 0; i != result.size_; i++)
    {
        result.pointer_[i] = lhs.pointer_[i] + rhs.pointer_[i];
    }
    return result;
}

构造函数vector(const A& size, const T& value)按预期运行,返回一个初始化为size的{​​{1}}元素的向量。 value似乎也在起作用。但是,当我尝试这样的事情时,我的程序没有按预期执行:

operator=

我的问题:如果#include <iostream> #include "vector.h" int main() { vector<int> test(5, 2); // Create a vector with five elements initialized to 2. vector<int> test2(5, 3); // Create a vector with five elements initialized to 3. std::cout << test.size() // Prints 5, as expected. std::cout << test2.size() // Prints 5, as expected. vector<int> try_result = test + test2; std::cout << try_result.size() // Prints 0--why? } 返回operator+的副本(而不是引用,我的代码中最初存在的问题),为什么看起来result仍然没有指向堆中的正确位置?

编辑:添加构造函数代码(我已对此进行了测试,但它似乎有效,但可能出于错误的原因):

try_result

EDIT2:添加复制构造函数。

template<typename T> template<typename A>
vector<T>::vector(const A& size)
{
    this->pointer_ = new T[size];
    this->size_ = size;
}

template<typename T> template<typename A>
vector<T>::vector(const A& size, const T& initial_value)
{
    this->pointer_ = new T[size];
    this->size_ = size;
    for (unsigned long i = 0; i != this->size_; i++)
    {
        pointer_[i] = initial_value;
    }
}

0 个答案:

没有答案