鱼C论坛

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

代码的函数部分看不懂

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

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

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

x
#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)部分的函数是什么意思啊
不要说是是现实“是不遇事不相加虚部与虚部相加”
我知道是这个作用,我是不知道为什么会实现这个功能
谢谢啦!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

就是我知道函数体的作用是,实部与实部相加,虚部与虚部相加
但是我不知道是如何实现这个功能的
就是能给解释下main函数的实现过程吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

还是看不懂你的问题

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

使用道具 举报

 楼主| 发表于 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

这就是实现过程啊...我的问题真的那么难理解吗...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你的这个问题给我的就是这种感觉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这样不就好了,是你之前提的问题不好
我知道你想知道什么了,大概
我想想看该怎么回答这个问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 17:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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