Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运算符重载会影响我的复制构造函数_C++_Operator Overloading_Copy Constructor - Fatal编程技术网

C++ 运算符重载会影响我的复制构造函数

C++ 运算符重载会影响我的复制构造函数,c++,operator-overloading,copy-constructor,C++,Operator Overloading,Copy Constructor,我在学习运算符重载时遇到了一个场景,在这个场景中,我需要一个清晰的理解或替代解决方案。这是我的密码 #include<iostream> class loc { int longitude, latitude; public: loc() { longitude = 0; latitude = 0; int i = 0; std::cout << "Constructor Called "

我在学习运算符重载时遇到了一个场景,在这个场景中,我需要一个清晰的理解或替代解决方案。这是我的密码

#include<iostream>

class loc {
    int longitude, latitude;
public:
    loc() {
        longitude = 0;
        latitude = 0;
        int i = 0;
        std::cout << "Constructor Called " << i++ << std::endl;
    }
    loc(int lg,int lt) {
        longitude = lg;
        latitude = lt;
    }
    loc(loc const& op2) {
        std::cout << "Copy Constructor Called " << std::endl;
    }
    void operator= (loc op2){
        std::cout << "Assignment operator called " << std::endl;
    }
    void show() {
        std::cout << longitude << " " << latitude << std::endl;
    }
    loc operator+ (loc op2);
};

loc loc::operator+ (loc op2) {
    loc temp;
    temp.longitude = this->longitude + op2.longitude;
    temp.latitude = latitude + op2.latitude;
    return temp;
}


int main() {

    loc ob1(5,6), ob2(10,15);
    ob1.show();
    ob2.show();

    ob1 = ob1 + ob2;
    ob1.show();
    return 0;
}

This will be the output of my program:

5 6
10 15
Copy constructor called
Constructor called 0
Copy constructor called
Assignment operator called
5 6
#包括
loc类{
int经度,纬度;
公众:
loc(){
经度=0;
纬度=0;
int i=0;

std::cout根据问题,复制构造函数不应通过运算符重载调用,因此引用类型必须作为参数传递,并随引用类型而不是按值传递返回。因此,它不会创建对象,也不会调用复制构造函数

loc& loc::operator+ (loc& op2) {
    longitude = this->longitude + op2.longitude;
    latitude = latitude + op2.latitude;
    return *this;
}

你看过了吗?除了在复制构造函数和复制赋值运算符中复制成员之外,你不应该做任何事情。如果你的代码做的不止这些,你可能应该重新考虑它。@Karthikgr当你创建赋值运算符或复制构造函数时,不要像现在那样使它们成为存根函数——它们不是简单的抛出函数ay函数不重要。创建此类函数后,必须正确分配成员。现在,复制构造函数和赋值运算符只输出一条消息,这会导致出现奇怪的行为。@PaulMcKenzie ya收到了,但我只是有一个疑问,我想用代码来表示,所以没有分配这不是为了任何项目,我只是想学习一些概念。@Rish,谢谢,伙计,我明白了。