课堂小练习: 设计、定义并实现Complex类

【实验结论】

#Complex.h

#ifndef HEADER_Complex_H
#define HEADER_Complex_H
#include<cmath>
#include<iostream>
using namespace std;
class Complex
{
    public:
        Complex(double real0=0,double imaginary0=0);
        Complex(Complex &p);
        void add(Complex a);
        void show();
        double mod();
    private:
        double real,imaginary;
};
 Complex::Complex(double real0,double imaginary0):real(real0),imaginary(imaginary0)
 {}
 Complex::Complex(Complex &p):real(p.real),imaginary(p.imaginary)
 {}
void Complex::add(Complex a)
{
    real+=a.real;
    imaginary+=a.imaginary;
}
 void Complex::show()
 {
     cout<<real<<"+"<<imaginary<<"i"<<endl;
 }
double Complex::mod()
 {
     return sqrt(real*real+imaginary*imaginary);
 }
 #endif

#main

#include<iostream>
#include"Complex.h"
using namespace std;
int main()
{
    Complex c1(3,5);
    Complex c2(4.5);
    Complex c3(c1);
    c1.add(c2);
    c1.show();
    cout<<c1.mod();
    return 0;
}

[运行结果]

 

【实验总结】

本来是想着用结构体定义类的,但是发现main函数里给出的输入比较适合用普通类,用结构体的话定义成员函数时大概想了一下,会比较麻烦,所以最后就没用结构体了。

还有一个小问题,就是“Complex c2=4.5”Dev-C++编译出来也显示了错误(如下图)

错误显示“对于'Complex::Complex(Complex)'即复制构造函数没有匹配的变量”。之后参照上面从c1的定义,直接将c2写成了c2(4.5),编译之后就对了。但是后来巧合之下把复制构造函数删了之后试了一下,发现“Complex c2=4.5"是可以运行的,在查过了CSDN和博客园之后都没有结果,嗯,个人感觉,可能是因为系统无法判断4.5是给复制构造函数的还是构造函数的,嗯,,,如果知道的话可以告诉我一下吗。

嗯,上面那个问题再补充一下,我将构造函数的初值去掉之后,再定义了一个构造函数Complex(double real0)/Complex(double real0=0),如果删去复制构造函数是可以的实现“Complex=4.5”的,但是加上复制构造函数依旧是不行的,所以我还是觉得是系统无法判断4.5是给复制构造函数还是构造函数。

 

【评论地址】

https://www.cnblogs.com/xiaobailong123/p/10631549.html
https://www.cnblogs.com/xtn-0326/p/10631725.html
https://www.cnblogs.com/Tiger-Hu22/p/10631879.html

 

posted @ 2019-03-30 16:49  一朵毛毛  阅读(168)  评论(0编辑  收藏  举报