我是这里的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();
}
答案 0 :(得分:3)
你的专栏:
v2 = v1;
不会调用您的赋值运算符。它只是将一个指针指向另一个指针。您需要在对象之间进行分配,以便运算符使用。
你想要这样的东西:
Vector v1;
v1.print_values();
Vector v2;
v2 = v1;
等等。你的程序也有一些内存泄漏 - 小心!
编辑说明:为什么*(p+i)
代替p[i]
?后者更容易阅读。
答案 1 :(得分:1)
您将一个指针指向另一个,而不是一个类实例。为了调用赋值运算符,你需要有两个类实例(你只有一个),然后使用指针来表示你访问这些实例,例如:
int main(){
Vector * v1 = new Vector();
v1->print_values();
Vector * v2 = new Vector();
*v2 = *v1;
v2->print_values();
Vector v3(*v1);
v3.print_values();
delete v1;
delete v2;
}
可替换地:
int main(){
Vector v1;
v1.print_values();
Vector v2;
v2 = v1;
v2.print_values();
Vector v3(v1);
v3.print_values();
}