课堂小练习: 设计、定义并实现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