课程视频(可能需要一点技巧才能打开):【link】
测试平台:devc++
注意:用工程打开的时候会报错undefined reference to `complex::operator+=(complex const&),应该是工程的编译过程和单个文件编译过程有区别,建议直接编译main.cpp测试即可
有机会要补一下口头笔记,下面的问题在课程前6节都讲到过了
如何定义c++的类
如何写一个构造函数
如何重构运算符
……
利用所学的内容写一个complex(复数)类~这个也是本课程的案例
main.cpp,测试模块:
#include
#include "complex.h"
using namespace std;
//对于complex的输出重构
ostream&
operator <<(ostream& os,const complex& x)
{
return os<<'('<<x.real()<<','<<x.imag()<<')';
}
int main(){
complex c1(1,2);
complex c2(4,5);
cout<<"原始复数:"<<endl;
cout<<"c1="<<c1<<endl;
cout<<"c2="<<c2<<endl;
c2+=c1;
cout<<"执行c2+=c1,c2="<<c2<<"\n";
return 0;
}
complex.h,定义类以及其中一些函数名称的头文件:
#ifndef __MYCOMPLEX__
#define __MYCOMPLEX__
//定义类
class complex;
//定义函数
complex&
__doapl(complex*ths,const complex& r);
//对类具体的定义
class complex{
private:
double re,im;
//友元函数
friend complex& __doapl(complex*,const complex&);
public:
//构造函数
complex(double r,double i)
: re(r),im(i)
{ }
//取私域的值
double real()const{return re;}
double imag()const{return im;}
//运算符重构
complex& operator += (const complex&);
};
#include"complex.cpp"
#endif
complex.cpp,将.h中的函数体具体申明,其实也可以直接写在.h中而不需要单独写一个.cpp:
#include "complex.h"
//对于.h文件中类函数内的具体的声明
inline complex&
__doapl(complex* ths,const complex&r)
{
ths->re+=r.re;
ths->im+=r.im;
return *ths;
}
inline complex&
complex::operator += (const complex& r)
{
return __doapl (this, r);
}
测试结果:
