合工大--关于C++相关知识点的总结

一、局部静态变量的特点

  • 局部静态变量将局部变量的安全的优点和静态变量作用域广的优点集于一身,可以将其理解为作用域为局部的静态变量。
  • 它在函数被调用之后不会消失,而是保留原来的值,占用的存储单元也不会释放,从而可以使反复多次调用同一个函数时,该变量仍能保留上一次调用结束时候的值,不像函数中的其他变量在每次函数执行完成后,内存便会释放,值无法保存。
  • 这个优势全局变量也有,但是局部静态变量只能在它存在的函数体中被改变,调用其他函数不能改变它的值,这使得它比全局函数更安全,程序运行更有序,从而避免一些不必要的bug。静态局部变量在程序运行时就创建,最后才消亡。在声明静态局部变量时,要在原声明前加上static。

二、类的继承和类的组合的区别

简述:类的组合是将一个已经声明完成的类以构建对象的形式,将一个或多个对象以类的属性的形式定义在一个新的类中。而类的继承是由一个定义完成的基类,将属性和函数以某种形式传承到派生类中。

  1. 数量方面
    组合:新的类中可以保存多个组合的类创建的对象。
    继承:派生类最多只能保存一份基类的属性和操作。
  2. 属性和函数方面
    组合:两种类之间的属性与函数几乎不会相互影响。
    继承:继承的private,protected,public三种形式会使基类的属性与函数的形式产生变化,原本外部可以调用的函数可能会因为继承而无法调用,原本内部函数可读的属性可能会被封存。许多函数还会存在覆盖、隐藏的问题,而这也使 得多态在此基础上呈现出来。
  3. 含义方面
    组合:组合更有一种包含的意思,即include。
    继承:继承更有一种属于的意思,即is。
  4. 衍生性
    组合:可以使得新类中含有多个旧类的对象,从而使程序结构简化,调用方便。
    继承:多样式的继承使得继承的可塑性极强,在不同情况下采用不同继承方式可以使类的封装的安全性的优点与调用的方便的优点进一步发挥。同时,继承可以同时继承多个基类,也可以同时继承出多个派生类,使得类与类之间的关 系可以进一步细化,一个新的派生类可以集结多个基类的特点,从而简化创 建新的派生类的步骤,可以避免许多重复操作。同时继承的多样性也使得虚 函数、纯虚函数、多态等概念的效果得到呈现,使得类的运用更加贴近真实 生活,而对类的设计也符合实际需求,更加方便。

三、一般成员函数和静态成员函数的特点

静态成员函数:
1、静态成员函数不能被声明为虚函数
2、没有this指针
3、通过“类名::”或“对象名.”调用
4、是类本身所有,在类加载的时候就会创建
5、程序可共享一个静态成员函数
6、静态成员函数只能访问静态成员变量,因为在静态成员函数创建时,普通变量还未创建。
7、可以不通过生成的类对象直接调用
8、与类实例无关,因为只能调用静态成员变量
9、在定义时,须在声明前加上“static”
一般成员函数:
1、可以被声明为虚函数,利于类的多态的实现
2、通过“this指针”或“对象名.”调用
3、调用时需要有类实例或者创建临时对象调用
4、可以调用一般变量也可以调用局部静态变量
5、可以被声明为纯虚函数

四、简述函数重载、同名隐藏和覆盖

函数重载:
条件:
1、多个函数的定义域相同
2、多个函数的函数名相同且参量不同(与返回值类型无关)
3、virtual可有可无
效果:
使得一个类中同函数名但参量不同的函数形成互补,比如可以设置无参构造函 数与有参构造函数。也可使构造对象的方式更多样,实现某种功能的形式更多 样。
同名隐藏:
条件:
1、多层,有基类与派生类的继承关系
2、函数名相同,参量不一定要相同或不同
效果:
将基类继承下来的函数用同名的函数隐藏,在调用时优先调用派生类的函数, 同时也可以通过基类类名::函数名来调用基类函数。
覆盖:
条件:
1、多层,有基类与派生类的继承关系
2、函数名和参量必须完全相同,返回值相同或有继承类关系
3、在基类中的函数为虚函数
效果:
实现多态,通过创建基类指针赋于派生类地址,以虚函数表的形式,凭借真实 地址调用地址指向的类中的虚函数,使得同一个函数名、对象类型可以通过地 址类型的改变实现不同的调用效果。如:通过Shape基类,凭借不同地址,分 别计算多种图形的面积、周长。

五、纯虚函数、虚函数、非虚函数的区别及使用场景

区别:

1、书写格式:
纯虚函数:virtual 返回值类型 函数名(参量)= 0;
虚函数:virtual 返回值类型 函数名(参量){};
非虚函数:返回值类型 函数名(参量){};
2、对派生类要求
纯虚函数:强制子类修改,否则无法创建对象
虚函数:提供子类默认值,可以修改也可以不修改
非虚函数:无法修改上一级函数
3、对类的影响:
纯虚函数:会将类变为抽象类,无法创建对象。因此抽象类一般将构造函数类 型设为protected。
虚函数、非虚函数:不会有此影响
4、函数适用范围:
纯虚函数:构造函数、拷贝构造函数、析构函数不能为纯虚函数
虚函数:构造函数、拷贝构造函数、析构函数不能为纯虚函数
非虚函数:无限制
5、调用方式:
虚函数:一般通过基类创建指针赋于派生类地址。会在类中创建一个虚函数表,在调用时,通过传入的指针调用相对应的虚函数。
非虚函数:指针或直接调用

使用场景:

纯虚函数:
基类抽象,如:Shape,某些属性无法通过函数计算时,将函数定义为纯虚函数,派生类必须对纯虚函数的函数体重新书写才能创建对象,从而实现派生类的多态功能。
虚函数:
当多个派生类要有同一种函数且函数体不同时,可在基类创建虚函数,需要实现多态功能时。
非虚函数:
函数相对独立,类与类之间不发生重名,或派生类与基类函数的函数体相同或 相似时,直接通过非虚函数的同名隐藏实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图南zzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值