鱼C论坛

 找回密码
 立即注册
查看: 2431|回复: 9

代码的函数部分看不懂

[复制链接]
发表于 2020-3-31 18:27:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<iostream>
  2. class Complex   //complex表示“复数”
  3. {
  4. public:
  5.         Complex();
  6.         Complex(double r,double i);
  7.         Complex complex_add(Complex &d);
  8.         void print();
  9. private:
  10.         double real;
  11.         double imag;
  12. };
  13. Complex::Complex()
  14. {
  15.         real = 0;
  16.         imag = 0;
  17. }
  18. Complex::Complex(double r,double i)
  19. {
  20.         real = r;
  21.         imag = i;
  22. }
  23. Complex Complex::complex_add(Complex &d)
  24. {
  25.         Complex c;
  26.         c.real = real + d.real;
  27.         c.imag = imag + d.imag;
  28.         return c;
  29. }
  30. void Complex::print()
  31. {
  32.         std::cout<<”(”<<real<<”,”<<imag<<”i)\n”;
  33. }
  34. int main()
  35. {
  36.         Complex c1(3,4),c2(5,-10),c3;
  37.         c3 = c1.complex_add(c2);
  38.         std::cout<<”c1=”;
  39.         c1.print();
  40.         std::cout<<”c2=”;
  41.         c1.print();
  42.         std::cout<<”c1+c2=”;
  43.         c3.print();
  44.         return 0;
  45. }
复制代码

哪位大神能给解释一下Complex Complex::complex_add(Complex &d)部分的函数是什么意思啊
不要说是是现实“是不遇事不相加虚部与虚部相加”
我知道是这个作用,我是不知道为什么会实现这个功能
谢谢啦!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-31 19:06:59 | 显示全部楼层
我是不知道你想知道什么
还有,你问题中的错别字太多,也许是这个问题导致的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是我知道函数体的作用是,实部与实部相加,虚部与虚部相加
但是我不知道是如何实现这个功能的
就是能给解释下main函数的实现过程吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

还是看不懂你的问题

对于这个问题 “但是我不知道是如何实现这个功能的”
不就是这样实现的吗? 实部与实部相加,虚部与虚部相加
你想知道什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-31 19:50:59 | 显示全部楼层
人造人 发表于 2020-3-31 19:47
还是看不懂你的问题

对于这个问题 “但是我不知道是如何实现这个功能的”
  1. #include<iostream>
  2. class ClxBase
  3. {
  4. public:
  5.         ClxBase()
  6.         {
  7. };
  8. virtual ~ClxBase()
  9. {
  10. };
  11. virtual void doSomething()
  12. {
  13.         std::cout<<”Do something in class ClxBase\n”
  14. }
  15. };
  16. class ClxDerived:public ClxBase
  17. {
  18. public:
  19.         ClxDerived()
  20.         {
  21. };
  22. ~ClxDerived()
  23. {
  24.         std::cout<<”Output from the destructor of class ClxDerived\n”;
  25. };
  26. void doSomething()
  27. {
  28.         std::cout<< ”Do something in class ClxDerived\n”;
  29. };
  30. };
  31. int main()
  32. {
  33.         ClxBase*pTest = new ClxDerived;
  34. }
复制代码

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

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

这就是实现过程啊...我的问题真的那么难理解吗...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 19:51:41 | 显示全部楼层
我知道x是什么,但是我想知道x是什么

你的这个问题给我的就是这种感觉
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这样不就好了,是你之前提的问题不好
我知道你想知道什么了,大概
我想想看该怎么回答这个问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-31 20:01:12 | 显示全部楼层
人造人 发表于 2020-3-31 19:56
这样不就好了,是你之前提的问题不好
我知道你想知道什么了,大概
我想想看该怎么回答这个问题

好,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 20:13:46 | 显示全部楼层
我不知道这是不是你想要的

  1. #include <iostream>

  2. class Complex   //complex表示“复数”
  3. {
  4. public:
  5.         Complex();
  6.         Complex(double r,double i);
  7.         Complex complex_add(Complex &d);
  8.         void print();
  9. private:
  10.         double real;
  11.         double imag;
  12. //}; // 这里你还用了中文的分号?
  13. };
  14. Complex::Complex()
  15. {
  16.         std::cout << "Complex::Complex()" << std::endl;
  17.         real = 0;
  18.         imag = 0;
  19. }
  20. Complex::Complex(double r,double i)
  21. {
  22.         std::cout << "Complex::Complex(double r,double i)" << std::endl;
  23.         std::cout << "r=" << r << ",i=" << i << std::endl;
  24.         real = r;
  25.         imag = i;
  26. }
  27. Complex Complex::complex_add(Complex &d)
  28. {
  29.         std::cout << "Complex Complex::complex_add(Complex &d)" << std::endl;
  30.         Complex c;
  31.         c.real = real + d.real;
  32.         c.imag = imag + d.imag;
  33.         return c;
  34. }
  35. void Complex::print()
  36. {
  37.         //std::cout<<”(”<<real<<”,”<<imag<<”i)\n”;      // 这个双引号比较奇怪
  38.         std::cout << "(" << real << "," << imag << "i)\n";
  39. }
  40. int main()
  41. {
  42.         Complex c1(3,4),c2(5,-10),c3;
  43.         c3 = c1.complex_add(c2);
  44.         return 0;
  45. }
复制代码

  1. $ ./main
  2. Complex::Complex(double r,double i)
  3. r=3,i=4
  4. Complex::Complex(double r,double i)
  5. r=5,i=-10
  6. Complex::Complex()
  7. Complex Complex::complex_add(Complex &d)
  8. Complex::Complex()
复制代码



这个是43行创建c1对象的时候输出的
  1. Complex::Complex(double r,double i)
  2. r=3,i=4
复制代码


这个是创建c2对象
  1. Complex::Complex(double r,double i)
  2. r=5,i=-10
复制代码


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


输出这个,说明执行完了30行
  1. Complex Complex::complex_add(Complex &d)
复制代码



最后这个是第31行创建对象c的时候输出的
  1. Complex::Complex()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-31 23:03:32 | 显示全部楼层
  1. 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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 15:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表