轻松学 c++之类与对象下篇 + 模板

好久不见各位小伙伴们,那么先前是博主能力有限,加之c++在有些部分确实有些难,使得博主停止学习了一段时间,在这段时间里博主也去重新给自己梳理并总结了一下知识点,那么接下来将会以通俗易懂的方式给大家讲解。、

那么废话不多说,我们进入正题

类与对象下篇

运算符重载

关键字:operator

格式:operator  运算符(参数);

eg.operator + (参数);

多元运算符的简单讲解

。⼀元运算符有⼀个参数,⼆元 运算符有两个参数

注意:operator是默认成员函数,有一个隐藏的this指针,因此参数⽐运算对象少⼀个

不能重载的运算符:.*      ::       sizeof         ?:          .

赋值运算符

赋值运算符重载的特点

1. 赋值运算符重载是⼀个运算符重载,规定必须重载为成员函数。赋值运算重载的参数建议写成 const 当前类类型引⽤,否则会传值传参会有拷⻉

2. 有返回值,且建议写成当前类类型引⽤,引⽤返回可以提⾼效率,有返回值⽬的是为了⽀持连续赋 值场景。

3. 没有显式实现时,编译器会⾃动⽣成⼀个默认赋值运算符重载,默认赋值运算符重载⾏为跟默认构 造函数类似,对内置类型成员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义类型 成员变量会调⽤他的拷⻉构造。

4. 像Date这样的类成员变量全是内置类型且没有指向什么资源,编译器⾃动⽣成的赋值运算符重载就 可以完成需要的拷⻉,所以不需要我们显⽰实现赋值运算符重载。

总结:1.必须重载为成员函数,且建议用const当前类类型

           2.有返回值,建议用引用

           3.没有写时,会自动生成

初始化列表

格式:类型()

                 :属性

                ,属性

           {#这里面可写可不写,小白阶段建议不写,易混淆#}

eg.  Date()、

            : _year(1900)

            ,  _month(1)

            ,  _day(1)

            {}

注意:这里的初始化顺序是根据类中私有区的声明顺序来初始化的。

static成员

• ⽤static修饰的成员变量,称之为静态成员变量,静态成员变量⼀定要在类外进⾏初始化。

• 静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。

• ⽤static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。

• 静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。

• ⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。

• 突破类域就可以访问静态成员,可以通过类名::静态成员或者对象.静态成员来访问静态成员变量 和静态成员函数

总结:1. 静态成员变量要在类外初始化

           2.静态成员变量是所有类共享的,且存在静态区中(什么是静态区后面会讲)

           3.静态成员函数没有指针

           4.静态成员函数只能访问其他的静态成员变量和静态成员函数

模板篇

函数模板

这里我不想多提,基本上和c语言的函数比较相似,

template<class T>

T Add(const T& left, const T& right)

{

return left + right;

}

int main()

{

int a1 = 10, a2 = 20;

double d1 = 10.0, d2 = 20.0;

Add(a1, a2);

Add(d1, d2);

return 0;

}

这里的话我还是建议大家看一下我的b站的视频,那里讲的比较详细

视频链接:【c++模板上】https://www.bilibili.com/video/BV1vZa2eaEKb?vd_source=9c17c862acda0523093f08ff7dd82439

类模板

template class Stack

{

public:

Stack(size_t capacity = 4)

{

_array = new T[capacity];

_capacity = capacity;

_size = 0;

}

void Push(const T& data);

private:

T* _array;

size_t _capacity;

size_t _size;

};

template <class  T>

void Stack::Push(const T& data)

{

// 扩容

_array[_size] = data;

++_size;

}

int main()

{

Stack<int> st1;// int

Stack<double> st2; // double

return 0;

}

模板实例化

Stack<int> st1;//模板实例化

stack是类  stack<int>是类型

加餐部分

new

格式:类型  变量 = new 类型[ 空间大小 ]

作用:和malloc一样申请空间,但又比malloc高级,会自动初始化

eg.char  tmp = new char[ capacity + 1 ]

delete

格式:delete[ ]   数组名;

作用:和free的作用一样都是用于释放空间,但需要手动置空

eg.delete[ ]  arr;

那么今天的内容就先到这里了,我们下期见!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值