巨兔12138 发表于 2020-4-1 00:48:13

对象引用函数的问题

#include<iostream>       
class Complex   //complex表示“复数”
{
public:
        Complex();
        Complex(double r,double i);
        Complex complex_add(Complex &d);
        void print();
private:
        double real;
        double imag;
};
Complex::Complex()
{
        real = 0;
        imag = 0;
}
Complex::Complex(double r,double i)
{
        real = r;
        imag = i;
}
Complex Complex::complex_add(Complex &d)
{
        Complex c;
        c.real = real + d.real;
        c.imag = imag + d.imag;
        return c;
}
void Complex::print()
{
        std::cout<<”(”<<real<<”,”<<imag<<”i)\n”;
}
int main()
{
        Complex c1(3,4),c2(5,-10),c3;
        c3 = c1.complex_add(c2);
        std::cout<<”c1=”;
        c1.print();
        std::cout<<”c2=”;
        c1.print();
        std::cout<<”c1+c2=”;
        c3.print();
        return 0;
}

对于这个代码,我的疑问有如下几点
Complex Complex::complex_add(Complex &d)
{
        Complex c;
        c.real = real + d.real;
        c.imag = imag + d.imag;
        return c;
}
①在c.real = real +d.real中,加数real是哪个?以main函数中的c3 = c1.complex_add(c2)为例,加数real是哪个
②real是Complex类的私有成员,Complex&d是一个地址,不是Complex类的函数,为什么可以访问私有成员real

BngThea 发表于 2020-4-1 08:30:44

1 就是对应对象的实部, c1.complex(c2)就是讲c1,c2的实部相加,虚部相加
2 因为这是类内部函数,可以直接访问成员变量

4goodworld 发表于 2020-4-1 12:40:33

①在c.real = real +d.real中,加数real是哪个?以main函数中的c3 = c1.complex_add(c2)为例,加数real是哪个
real是c1的
②real是Complex类的私有成员,Complex&d是一个地址,不是Complex类的函数,为什么可以访问私有成员real
Complex&d 你看清楚它&的位置,它是一个别名而已,传递的是一个 Complex类 的变量

巨兔12138 发表于 2020-4-1 16:46:33

4goodworld 发表于 2020-4-1 12:40
①在c.real = real +d.real中,加数real是哪个?以main函数中的c3 = c1.complex_add(c2)为例,加数real是哪 ...

Complex Complex::complex_add(Complex &d)
这个代码的参数为什么要传一个地址进去呢?不理解这一点,您能给解释一下吗

人造人 发表于 2020-4-1 17:39:57

巨兔12138 发表于 2020-4-1 16:46
Complex Complex::complex_add(Complex &d)
这个代码的参数为什么要传一个地址进去呢?不理解这一点,您 ...

传引用,为了避免再构造一个对象,减少执行开销

4goodworld 发表于 2020-4-1 19:38:09

巨兔12138 发表于 2020-4-1 16:46
Complex Complex::complex_add(Complex &d)
这个代码的参数为什么要传一个地址进去呢?不理解这一点,您 ...

我可没说传地址呀,你百度下 引用
页: [1]
查看完整版本: 对象引用函数的问题