gpt4 book ai didi

c++ - operator+ 和 operator= 的运算符重载 C++

转载 作者:太空宇宙 更新时间:2023-11-04 11:49:38 24 4
gpt4 key购买 nike

对于运算符重载,我一整天都在抓耳挠腮,我的 operator+ 函数正确计算了数据,但我需要将临时类的数据传递给 operator= 以将其分配给我的类的一个单独实例并返回temp 不起作用(我想数据在退出时被破坏了?)整个想法来自 main x = y + z 被调用来添加来自 y 和 z 的两个 vector 的数据并将其分配给 x 我正确地得到 y + z 的计算,但是将它传递给 x 我已经打了一个砖墙有什么问题?或者有人知道吗?这是我类的代码

VecXd& operator=(const VecXd& rhs)
{
VecXd<V> temp;
temp.dimension = rhs.dimension;
cout << "operator= check dimension is..." << temp.dimension << endl;

for(int i = 0; i < rhs.dimension; i++) //Passing data to x?
{
cout << "test" << endl;
temp.vecArr[i] = rhs.vecArr[i];
cout << temp.vecArr[i] << " our new value" << endl;
}
}

friend VecXd& operator+(VecXd& lhs, VecXd& rhs){

VecXd<V> temp;
cout << lhs.dimension << "-lhs d-" << rhs.dimension << "-rhs d-" << endl; //works
if(lhs.dimension == rhs.dimension) //dimension level check
{
temp.vecArr = new V[lhs.dimension];
for(int i = 0; i < lhs.dimension; i++)
{
temp.vecArr[i] = lhs.vecArr[i] + rhs.vecArr[i];
cout << temp.vecArr[i] << " our new value" << endl;
}
//return *temp.vecArr;
return temp; //***? how to pass data?
}
else{
cout << "Dimensions do not match!!! Error!" << endl;
}
}

有什么想法吗?别太苛刻了……哈哈……:l

最佳答案

您的赋值运算符是伪造的:赋值应该执行的操作是使 this 指向的对象与右侧的对象相同。您的赋值运算符创建一个临时对象并设置该对象。但是,它会在退出赋值运算符时消失。此外,您声明您的赋值运算符返回一个引用,该引用通常返回对 *this 的引用,但没有返回声明。

除非我有充分的理由采取不同的做法,否则我会根据复制构造函数、析构函数和 swap() 函数来实现我的赋值运算符:

VecXd& VecXd::operator=(VecXd rhs) 
{
this->swap(rhs);
return *this;
}

复制构造函数被调用来创建函数的参数,很好地复制对象。然后新创建的拷贝与被分配对象的内容交换,在返回 *this 后,原始内容由为 rhs 创建的临时对象的析构函数释放>。所需要的只是一个相对函数swap():

void VecXd::swap(VecXd& other)
{
std::swap(this->dimension, other.dimension);
std::swap(this->vecArr, other.vecArr);
}

当然,swap() 函数假设两个成员可以交换。由于我还没有看到您对 VecXd 的声明,所以我无法判断这是否有效,但它通常应该有效。

我还没有真正看过你的加法运算符。

关于c++ - operator+ 和 operator= 的运算符重载 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18883956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com