2021.4.29学习笔记

本文详细介绍了C++中的拷贝构造函数、友元函数和继承的概念及其应用。探讨了多态的实现,强调了虚函数在运行时绑定的重要性。同时,讲解了C和C++的异常处理机制,指出C++异常处理在构造函数出错处理上的优势。此外,还阐述了纯虚函数和抽象类在接口设计中的角色。
摘要由CSDN通过智能技术生成

拷贝构造函数:

形参是该类型的对象引用,若类内无自定义拷贝构造函数系统会默认生成拷贝构造函数;函数返回值
移动拷贝构造函数:解决临时对象拷贝的开销问题

友元函数

可以把一个函数指定为友元,也可以把整个类指定成友元
友元函数不是类的成员函数
某类的友元函数的作用域并非该类作用域,如果友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则与一般的函数相同

友元函数不是类的一部分,但又需要频繁的访问类的数据成员
一般情况下,单目运算符最好重载为类的成员函数;双目运算符最好重载为友元函数

-> = () []
类型转换运算符只能以成员函数方式重载
流运算符只能以友元的方式进行重载

继承:

类之间的关系:
组合:A类中含有B类的成员
继承:继承的关系有传递性不具有对称性

保护继承
私有继承
public作用:传承接口,间接的传承了数据
构造函数的执行顺序:
基类->成员对象->派生类(子类)
class b:class a;class c(从左到右)

析构函数
执行顺序

c++向上转型

多态

多态:同一条语句可以执行不同的操作,看起来有不同的表现方式
函数的重定义:在派生类中重新定义基类中具有相同名称的函数
多态的形成条件:
1、父类中有虚函数
2、子类override(覆写)父类中的虚函数
3、通过已被子类对象赋值的父类指针或引用调用共同的接口
多态的分类:
1、静多态(联编):(编译时绑定)函数重载,也是一种多态通过命名倾轧在编译阶段决定
2、动多态(运行时绑定):引用也可以实现多态,引用的本质是指针,指针可以实现多态,引用当然也可以

注意事项:
1、基类中用virtual申明成员函数为虚函数,类外实现虚函数时不必加virtual
2、在派生类中重新定义此函数称为覆写,要求函数名返回值类型函数参数个数及类型全部匹配
3、为避免在派生类写错虚函数,可在派生类的虚函数中添加0verrid修饰,确保该函数为虚函数并覆写来自基类的虚函数
4、在效率上,虚函数的效率很低,因此没有必要将所有成员都申明为虚函数(通过vfpr调用重写函数是在程序运行时进行的,因此需要通过寻址操作才能真正调用应该调用的函数;而普通函数是在编译时就确定了函数的调用 )
限制:
1、只有类的成员函数才能申明为虚函数
2、静态成员函数不是虚函数
3、内联函数不能是虚函数
4、析构函数不能是虚函数
5、析构函数可以定义为虚函数且通常定义为虚析构函数(1、当你可能通过基类指针删除派生类对象时)

纯虚函数

virtual 函数名 = 0;
纯虚函数只有申明,没有实现,被“初始化”为0;

抽象类:

含有纯虚函数的类
作用:(接口)
被继承,提供族类的接口
注:
纯虚函数在派生类中没有对该函数定义,则该函数在派生类中仍为纯虚函数,派生类仍为纯虚函数
多态的实现机制:

C语言的异常处理:

方法:通常采用返回值的方式或是置位全局变量的方式
问题:
返回值正是我们需要的数据,且返回数据同出错数据容错差不高
全局变量:在多线程中易引发竞争,当错误发生时,上级函数要出错处理,层层上报,造成过多的出错处理代码且传递效率低下

C++异常处理

作用:
异常的引发和异常的处理不必在同一个函数
构造函数没有返回类型,无法通过返回值来报告运行状态,所以只通过一种非函数机制的途径,也就是异常处理机制来解决构造函数的出错问题
万能引用
C++提出万能引用的原因
能够接受左值和右值
定义:
template < typename> void func(T && param){}
万能引用的语境
必须是函数模板,必须发生了模板类型推断

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值