• C++类的构造:简单的complex搭建


    课程视频(可能需要一点技巧才能打开):【link
    测试平台:devc++
    注意:用工程打开的时候会报错undefined reference to `complex::operator+=(complex const&),应该是工程的编译过程和单个文件编译过程有区别,建议直接编译main.cpp测试即可

    1、课程讲解

    有机会要补一下口头笔记,下面的问题在课程前6节都讲到过了
    如何定义c++的类
    如何写一个构造函数
    如何重构运算符
    ……

    2、代码

    利用所学的内容写一个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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    测试结果:
    在这里插入图片描述

  • 相关阅读:
    Mybatis快速入门
    PMP考前梳理:敏捷知识的相关要点
    div的并列和包含关系
    【系统架构】软件架构的演化和维护
    300题线性代数 第四讲 线性方程组
    【暗月安全】2021年渗透测试全套培训视频
    Kubernetes基础知识了解
    Unity两种VR环境配置方法
    什么是虚拟DOM?什么是diff算法?
    C语言类型占内存大小
  • 原文地址:https://blog.csdn.net/qq_45751990/article/details/127734680