候捷C++学习笔记-Complex类

文章总结了学习侯捷老师C++视频中的关键知识点,包括使用初始化列表构造函数以提高效率,考虑const在函数参数和返回类型中的应用,优先使用引用传递参数,讨论了重载运算符和内联函数的作用,以及如何重载输出操作符。同时,提供了自己编写的Complex类代码示例,展示了运算符重载和友元函数的应用。
摘要由CSDN通过智能技术生成


前言

最近在看侯捷老师的c++视频,于是写文章记录一下收获。由于版权问题相关视频在b站下架,于是这里分享一下网盘资源。
视频链接: 网盘链接 提取码: i8dp


一、几点总结

  • 1.写类的构造函数时最好使用初始化列表,速度更快
  • 2.定义函数时要思考输入参数和返回类型要不要加const
  • 3.参数的传递尽量使用引用传递(只有四个字节),而不是值传递
  • 4.函数的返回值考虑return by value(值传递) 还是return by reference(引用传递)
  • 5.为什么重载运算符+要设计在类的外面(全局函数)?
    答:因为+的类型有很多,例如 类+double,类+类,double+类,设计成类的成员函数就会受限
  • 6.如果返回的是临时对象(例如return string() ),则不返回引用,因为函数执行结束后该对象就被销毁了
  • 7.什么是inline
    答:inline被称为内联函数,编译器可以将内联函数“内敛地”展开,可以避免函数调用的开销(保存和恢复寄存器的值等),一般用内联函数来优化规模较小流程直接频繁调用的函数。当然编译器也可以忽略程序员的inline请求。
  • 8.输出操作符<<)的重载只能写在全局
    因为cout(输出流)在运算符左边,而类内重载运算符默认第一个参数是该类的一个对象(Complex * this),所以重载<<只能写成全局。
  • 9.定义友元函数可以直接访问类的私有成员,可以避免函数调用获取类私有成员的开销

二、Complex类代码(本人自己编写)

1.Complex.h

#ifndef _COMPLEX_H_
#define _COMPLEX_H_

#include <iostream>

class Complex {
public:
    Complex(double r = 0, double i = 0)
        : re(r), im(i)
    { }
    double real() const
    {
        return re;
    }
    double imag() const
    {
        return im;
    }
    Complex& operator += (const Complex& r);

private:
    double re, im;

    friend Complex& __doapl(Complex*, const Complex&);
};


#endif //_COMPLEX_H_

2.Complex.cpp

#include "Complex.h"

inline Complex& __doapl(Complex* ths,const Complex& r)
{
    ths->re += r.re;
    ths->im += r.im;
    return *ths;
}

Complex& Complex::operator +=(const Complex& r)
{
    return __doapl(this,r);
}

3.main.cpp

#include <iostream>
#include "Complex.h"

using namespace std;

inline Complex
operator + (const Complex& x, const Complex& y)
{
    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());
}

inline ostream&
operator << (ostream& os,const Complex& r)
{
    return os<<'('<<r.real()<<','<<r.imag()<<')';
}

int main()
{
    const Complex temp(2,1);
    cout << temp <<endl;
    return 0;
}


总结

简单总结了学习侯捷老师c++面向对象课程的第一个实例的几点收获。希望能坚持学习和记录下去。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值