c++ - 这应该调用赋值运算符,但是如何调用呢?

标签 c++

我是这里的 C++ 新手。我的任务是创建一个 Vector 类,而不使用已经存在的 Vector 类。我不确定我是否正确地实现了赋值运算符。如果是这样,我如何在主要功能中使用它?

# include <iostream>
# include <string.h>
using namespace std;

class Vector{
public:
    unsigned int * p;
    size_t size;              

    Vector(){  // Default contructor
        cout << "The default contructor" << endl;
        this -> size = 20;                // initial value
            this -> p = new unsigned int [size];  
        // trying to set every elements value to 0.
        for(int i = 0; i < size; i++){
            *(p+i) = 0;     
        }
    }

    Vector (const Vector & v){   // The copy contructor
        cout << "The copy constructor" << endl;
        this -> size = v.size;

        p = new unsigned int[size];     
        for(int i = 0; i < size; i++){
            *(p+i) = *(v.p + i);
        }
    }

    Vector& operator = (const Vector & v){
        cout << "The assignment operator" << endl;
        this -> size = v.size;

        p = new unsigned int[size];     
        for(int i = 0; i < size; i++){
            *(p + i) = *(v.p + i);
        }
        //p = p - size;       // placing back the pointer to the first element
        //return *this;       // not sure here
    }


    void print_values(){
        for(int i = 0; i< size; i++){
            cout << *(p + i) << " ";
        }
        cout << endl;   
    }

};

int main(){
    Vector * v1 = new Vector();  
    (*v1).print_values();
    Vector * v2;      // this should call the assignment operator but......... how?
    v2 = v1;
    (*v2).print_values();
    Vector v3(*v1);
    v3.print_values();
}

最佳答案

你的线路:

v2 = v1;

不会调用您的赋值运算符。它只是将一个指针分配给另一个指针。您需要在对象 之间进行分配以供您的运算符使用。

你想要这样的东西:

Vector v1;
v1.print_values();
Vector v2;
v2 = v1;

等等。您的程序也有一些内存泄漏 - 小心!

编者按:为什么用 *(p+i) 而不是 p[i]?后者更容易阅读。

关于c++ - 这应该调用赋值运算符,但是如何调用呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19012185/

相关文章:

数组中struct中的c++成员函数指针给出编译错误

C++ 函数模板 : Derived and explicit return type

c++ - 如何使用 boost Date_Time 获取以毫秒为单位的 GMT 时间?

c++ - C++ 电子邮件客户端中的 OpenSSL - 服务器关闭与 TLSv1 警报消息的连接

c++ - 服务器不响应使用 select() 的新客户端,cpp

c++ - tolua++:将指针所有权转移到 lua gc

c++ - 模板类的 Visual Studio C++ 链接器问题

c++ - bool Book::isEmpty() const 有问题

c++ - 运算符重载 C++ +=

c++ - _tcsncpy_s() 覆盖旧内容?