巨兔12138 发表于 2020-3-31 18:27:31

代码的函数部分看不懂

#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)部分的函数是什么意思啊
不要说是是现实“是不遇事不相加虚部与虚部相加”
我知道是这个作用,我是不知道为什么会实现这个功能
谢谢啦!!!

人造人 发表于 2020-3-31 19:06:59

我是不知道你想知道什么
还有,你问题中的错别字太多,也许是这个问题导致的?

巨兔12138 发表于 2020-3-31 19:24:39

人造人 发表于 2020-3-31 19:06
我是不知道你想知道什么
还有,你问题中的错别字太多,也许是这个问题导致的?

就是我知道函数体的作用是,实部与实部相加,虚部与虚部相加
但是我不知道是如何实现这个功能的
就是能给解释下main函数的实现过程吗

人造人 发表于 2020-3-31 19:47:04

巨兔12138 发表于 2020-3-31 19:24
就是我知道函数体的作用是,实部与实部相加,虚部与虚部相加
但是我不知道是如何实现这个功能的
就是能 ...

还是看不懂你的问题

对于这个问题 “但是我不知道是如何实现这个功能的”
不就是这样实现的吗? 实部与实部相加,虚部与虚部相加
你想知道什么?

巨兔12138 发表于 2020-3-31 19:50:59

人造人 发表于 2020-3-31 19:47
还是看不懂你的问题

对于这个问题 “但是我不知道是如何实现这个功能的”


#include<iostream>
class ClxBase
{
public:
        ClxBase()
        {
};
virtual ~ClxBase()
{
};
virtual void doSomething()
{
        std::cout<<”Do something in class ClxBase\n”
}
};
class ClxDerived:public ClxBase
{
public:
        ClxDerived()
        {
};
~ClxDerived()
{
        std::cout<<”Output from the destructor of class ClxDerived\n”;
};
void doSomething()
{
        std::cout<< ”Do something in class ClxDerived\n”;
};
};
int main()
{
        ClxBase*pTest = new ClxDerived;
}

就比如我想知道这个代码main函数的实现过程
我就会这样解释

main函数中,在基类ClxBase中定义了一个指针pTest指向子类ClxDerived,所以运行代码时,先执行子类ClxDerived的doSomething方法输出Do something in class ClxDerived,然后析构器清理内存,执行析构器代码输出Output from the destructor of class ClxDerived

这就是实现过程啊...我的问题真的那么难理解吗...

人造人 发表于 2020-3-31 19:51:41

我知道x是什么,但是我想知道x是什么

你的这个问题给我的就是这种感觉

人造人 发表于 2020-3-31 19:56:20

巨兔12138 发表于 2020-3-31 19:50
就比如我想知道这个代码main函数的实现过程
我就会这样解释



这样不就好了,是你之前提的问题不好
我知道你想知道什么了,大概
我想想看该怎么回答这个问题

巨兔12138 发表于 2020-3-31 20:01:12

人造人 发表于 2020-3-31 19:56
这样不就好了,是你之前提的问题不好
我知道你想知道什么了,大概
我想想看该怎么回答这个问题

好,谢谢

人造人 发表于 2020-3-31 20:13:46

我不知道这是不是你想要的

#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()
{
      std::cout << "Complex::Complex()" << std::endl;
      real = 0;
      imag = 0;
}
Complex::Complex(double r,double i)
{
      std::cout << "Complex::Complex(double r,double i)" << std::endl;
      std::cout << "r=" << r << ",i=" << i << std::endl;
      real = r;
      imag = i;
}
Complex Complex::complex_add(Complex &d)
{
      std::cout << "Complex Complex::complex_add(Complex &d)" << std::endl;
      Complex c;
      c.real = real + d.real;
      c.imag = imag + d.imag;
      return c;
}
void Complex::print()
{
      //std::cout<<”(”<<real<<”,”<<imag<<”i)\n”;      // 这个双引号比较奇怪
      std::cout << "(" << real << "," << imag << "i)\n";
}
int main()
{
      Complex c1(3,4),c2(5,-10),c3;
      c3 = c1.complex_add(c2);
      return 0;
}


$ ./main
Complex::Complex(double r,double i)
r=3,i=4
Complex::Complex(double r,double i)
r=5,i=-10
Complex::Complex()
Complex Complex::complex_add(Complex &d)
Complex::Complex()



这个是43行创建c1对象的时候输出的
Complex::Complex(double r,double i)
r=3,i=4


这个是创建c2对象
Complex::Complex(double r,double i)
r=5,i=-10


接下来的这个是创建c3对象,使用的是默认构造函数
Complex::Complex()

输出这个,说明执行完了30行
Complex Complex::complex_add(Complex &d)


最后这个是第31行创建对象c的时候输出的
Complex::Complex()

4goodworld 发表于 2020-3-31 23:03:32

Complex Complex::complex_add(Complex &d)
这个 Complex &d是引用 ,相当于传递一个 complex类型的 参数(或者叫做值)
对于 c3 = c1.complex_add(c2);而言
它巧妙地解决了c1+c2的问题
你定义了
Complex c1(3,4),c2(5,-10),c3;
那么对于c1而言,
real = 3;
imag =4;
明确了
然后你又
c1.complex_add(c2);
不就是要对下面的内容进行操作

      Complex c;//这个局部变量,不去管
      c.real = real + d.real; //real =3,d.real等于c2.real,c2.real不就等于5 ,结果为8
      c.imag = imag + d.imag;//同理 4-10=-6
      return c;
最后的结果,应该是 8,-6
页: [1]
查看完整版本: 代码的函数部分看不懂