C++面向对象程序设计(一)_复数类实现

参考视频https://www.bilibili.com/video/BV1cb411B7fk?p=6
代码如下:

//
// Created by zlc on 2020/3/28.

//data一定放在private里面。
//参数尽可能使用pass by reference。//
//返回值尽可能使用return by reference。//
//在类的body中的函数,应该加const的要加const。//
//构造函数中的,尽量使用初始化列表initialization list
//

//防卫式声明
#ifndef UNTITLED_COMPLEX_H
#define UNTITLED_COMPLEX_H
class complex;
class complex {
public:
    complex(double a=0,double b =0)
    :re(a),im(b) //初值列
    { }
    //函数在 class body 內定义完成,便自动 成為 inline 候选人
    //在类成员函数的声明和定义中//const的函数不能对其数据成员进行修改操作。
    //const的对象,不能引用非const的成员函数。
    double real() const { return re;} //函数不需要改变里面的值,加const
    double imag() const { return im;}
    //操作符重载
    complex& operator +=(const complex&);
private:
    double re,im;
    //对外宣称这是个友元,可以取私有的data
    friend complex& __doapl(complex*,const complex&);
};
//右边加到左边,右边不会变,所以加个const ,因为左边不是临时变量,可以传引用
//返回值是 complex& 会不会inline 看编译器
inline complex&
complex::operator+=(const complex& r)
{
    return __doapl(this,r);
}
//非成员函数,全局函数
//因为左边是会变的,不用const
inline complex&
__doapl(complex* ths,const complex& r)
{
    ths->re += r.re;
    ths->im += r.im;
    return *ths; //这么传引用出去
}
//全局函数,返回complex类型,此处不能传出引用,因为是临时对象
inline complex
operator + (const complex& x, const complex& y)
{
    //相当于构造出一个complex
    return complex(x.real()+y.real(),x.imag()+y.imag());
}
inline complex
operator + (const complex& x, double y)
{
    return complex(x.real()+y,x.imag());
}
inline complex
operator + (double x, const complex& y)
{
    return complex(x+y.real(), y.imag());
}
//输出复数
//complex c1(9,8);
//cout << c1 << endl;
#include <iostream>
using namespace std;
inline ostream&  //返回的就是os 可以传引用
operator <<(ostream& os, const complex& x)
{
    return os << '('<<x.real()<<","<<x.imag()<<'i'<<')';
}
#endif //UNTITLED_COMPLEX_H

main函数:

#include "complex.h"
int main() {
    complex c1(1,-1);
    complex c2;
    complex c3(12,34);
    double a = 12;
    c2+=c1;
    cout<< c3+a<<endl;
    cout<< c2 <<endl;
    cout<< c2+c3<<endl;
    return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值