C++面向对象高级开发 课程学习笔记

C++面向对象高级开发笔记

最近在rs上下了侯捷老师的C++网课,感觉非常不错

ctor放在private里(Singleton模式)

image-20210422154228833

常量成员函数

image-20210422160147809

注意标黄的const

不会改变数据内容的函数,马上加上const

因为要考虑这种情况,上述类定义了一个复数。如果我们上面没有写const,则下面的写法就会报错,因为这个函数可能会对类的属性进行改变。

参数传递(pass by value & pass by reference)(尽量by reference)

image-20210422162212409

尽量不要pass by value,因为pass by reference更快。

传引用可能会引起改变,如果不希望对方改变,则加const

返回值的传递(pass by value & pass by reference)(尽量by reference)

image-20210422163320113

return by reference语法分析

传达者无需知道接收者是以reference的形式接收。(Reference的好处)

image-20210422195307963

为什么要返回一个引用?image-20210422201459929

因为需要应对右边的情况,image-20210422201550128该式从右向左加


友元函数friend

image-20210422164718912

相同class的各个obj互为友元

image-20210422165520523

注意

  1. 数据放在private
  2. 参数尽可能pass by reference
  3. return reference
  4. 尽量去用初始列

class body外的各种定义(definations)

1.函数+const

image-20210422165512631

第一个参数没有const,第二个有,因为数据加之后的结果将储存在第一个参数给定的指针对应的对象中。

2.全域函数

imag是一个global函数(全域函数)

image-20210422202451015

操作符重载

一、操作符重载-1,成员函数(operator overloading)有 this

image-20210422171152563

之所以写一个__doapl,可能是为了让其他class也去用。

二、操作符重载-2,非成员函数,无this(非原地操作)

image-20210422202924028

三、正相、反相

image-20210422210204987

四、==!=

inline bool
operator == (const complex& x,
            const complex& y)
{
	return real (x) == real (y)
        && imag (x) == imag (y);
}

inline bool
operator == (const complex& x, double y)
{
    return real (x) == y && imag (x) == 0;
}

inline bool
operator == (double x, const complex& y)
{
    return x == real (y) && imag (y) == 0; 
}

image-20210422210708059

image-20210422210257787

五、共轭(共轭不是运算符),<<

inline complex
conj (const complex& x)
{
    return complex (real (x), -imag (x));
}

#include <iostream.h>
ostream&
operator << (ostream& os, const complex& x)
{
    return os << '(' << real (x) << ',' << imag (x) << ')';
}

<<绝对不能写成成员函数

{
	complex c1(2, 1);
    cout << conj (c1);
    cout << c1 << conj(c1);
}

结果image-20210422212440365

思考上面的这行代码,想想为什么重载<<时要return ostream&

cout << c1 << conj(c1);

显然,这里时从左向右运算


temp object(临时对象)(TYPENAME())

上述三个函数的返回值绝不可是return by reference,因为他们返回的必定是local object

临时对象:complex(..., ...);

image-20210422204840758

一般很少用,标准库中很多


小结

设计一个class要注意什么?

  1. initialization list要会用

    complex (double r = 0, double i = 0)
    	: re(r), im(i)
    { }
    
  2. 函数该加const就加

  3. 参数传递尽量考虑pass by value

  4. 数据尽可能放到private

  5. 函数尽可能放到public

friend

  1. 可以是函数也可以是类
  2. 同一个类下的obj互为友元

class body外的各种定义(definations)

运算符重载

  1. 可以写为成员函数,也可以写为非成员函数
  2. <<只能写为非成员函数
  3. 注意return by value还是return by reference
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值