琴长不过时光 发表于 2020-1-21 15:14:34

关于引用做返回值的问题

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"
using std::cout;
using std::cin;
using std::endl;

class Complex
{
private:
        int a;
        int b;
public:
        Complex(int a, int b)
        {
                this->a = a;
                this->b = b;
        }
public:
        void printCom()
        {
                cout << this->a << "" << this->b << endl;
        }
public:
        friend Complex& operator++(Complex &c);
public:
        Complex& operator--()
        {
                this->a--;
                this->b--;
                return *this;
        }
};

Complex& operator++(Complex &c)
{
        c.a++;
        c.b++;
        return c;
}

void main()
{
        Complex c(11, 22);
        ++c;
        c.printCom();

        --c;
        c.printCom();
        system("pause");
}


问题:Complex& 返回一个引用究竟是啥子意思?为啥Complex& 返回的是c有时返回*this*this应该是对象吧

人造人 发表于 2020-1-21 17:22:47

你看的哪个教材?听我的,把那个教材撕了,换一个
正确的++,--运算符重载只有下面这4条语句

T &operator++();
const T operator++(int);

T &operator--();
const T operator--(int);

琴长不过时光 发表于 2020-1-21 17:24:40

人造人 发表于 2020-1-21 17:22
你看的哪个教材?听我的,把那个教材撕了,换一个
正确的++,--运算符重载只有下面这4条语句

我看的是 传智 扫地僧讲的视频 讲的很好可能是视频有点老了 你这个代码是哪本书里的 我去看看

琴长不过时光 发表于 2020-1-21 17:25:26

人造人 发表于 2020-1-21 17:22
你看的哪个教材?听我的,把那个教材撕了,换一个
正确的++,--运算符重载只有下面这4条语句

你这个运算符重载 是成员函数吧 我在试着用成员函数 和友元函数都进行运算符重载

人造人 发表于 2020-1-21 17:31:56

琴长不过时光 发表于 2020-1-21 17:25
你这个运算符重载 是成员函数吧 我在试着用成员函数 和友元函数都进行运算符重载

为什么要在类外重载或者在其他类中重载这两个运算符
这可是++,--运算符,是要改变当前对象的

首先,在类外重载一定是不可行
在其他类中以友元函数的形式重载也不妥(从可移植的角度来讲)

人造人 发表于 2020-1-21 17:32:29

More Effective C++

Croper 发表于 2020-1-21 18:37:40

能不用友元函数重载就别用。可能会发生一些非预期的类型转化,在火车上暂时没法实验,不过几天前我被这东西坑惨了。

Croper 发表于 2020-1-21 18:45:45

本帖最后由 Croper 于 2020-1-21 18:47 编辑

https://fishc.com.cn/forum.php?mod=viewthread&tid=154100

琴长不过时光 发表于 2020-1-22 20:58:44

页: [1]
查看完整版本: 关于引用做返回值的问题