(C++)运算符重载和拷贝函数

当拷贝函数和运算符重载同时出现时,会出现错误
只有运算符重载时,函数正常运行

img


只有拷贝函数时,函数正常运行

img


当两个同时存在时,出现错误,问一下,这是什么错误

img

这个错误信息表明在你的代码中调用了一个名为Integer的构造函数,但传递的参数类型不匹配。更具体地说,它指出没有一个与Integer类的构造函数的参数匹配。

这段代码存在几个问题,我帮你逐个指出并进行修正。
1.类名与构造函数名不一致
在类定义中,类名为 Integerf,但构造函数的名称为 Integer,这是不一致的。应该将类名改为 Integer,以与构造函数名称相一致。

2.类定义中的 private 关键字
在类定义中,private 后面缺少了一个冒号(:),应该加上冒号,否则会导致语法错误。

3.构造函数的参数类型错误
在类定义中,构造函数应该使用 Integer(int num) 的形式,而不是 Integer(Integer &p) 的形式。因为构造函数是用来初始化对象的,而 Integer &p 不是一个合法的对象类型。应该使用 int 类型作为参数类型。

4.运算符重载函数的定义错误
在定义 operator+ 函数时,应该将函数体中的多余的 { 删除,并在开头添加 Integer 类型。并且,在函数名和参数列表之间缺少了一个空格,应该添加上去。
-
修改后的代码如下:

#include <iostream>
using namespace std;

class Integer {
private:
    int num;
public:
    Integer(int num): num(num) {}
    Integer(const Integer &p) { num = p.num / 2; }
    void show() { cout << num << endl; }
    friend Integer operator+(const Integer &il, const Integer &i2);
};

Integer operator+(const Integer &il, const Integer &i2) {
    return Integer(il.num + i2.num);
}

int main(int argc, char *argv[]) {
    Integer a(30);
    Integer b(40);
    Integer c(a);
    c.show();
    return 0;
}


再试一下