C++基础整理

本文深入探讨了C++的基础知识,重点介绍了面向对象的三大特性——封装、继承和多态,详细讲解了多态的静态和动态实现方式。此外,还涵盖了类的访问权限、构造函数、析构函数、拷贝构造函数、赋值函数和移动构造函数,以及深拷贝与浅拷贝的区别。同时,文章讨论了内存管理,包括内存分区、new/delete与malloc/free的区别,以及内存泄露和内存溢出的概念。最后,提到了一些C++的关键字和类型转换的相关知识点。
摘要由CSDN通过智能技术生成

1.面向对象的三大特性(核心都是为了代码重用,多态是为了最大程度的接口复用)

  • 封装:把客观事物抽象成类,并且将属性和操作属性的方法放在一起。

  • 继承:是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。

  • 多态:所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

    • 静态多态:函数入口地址在编译期确定,通过重载和模板来实现
    • 动态多态(动态绑定):函数入口地址在运行时确定,通过虚函数和继承关系来实现

实现方法?编译器怎么支持?


2.类的访问权限

  • public
  • protected:可以被类中的函数,子类的函数,友元函数访问,但不可以由该类的对象访问
  • private:可以被类中的函数,友元函数访问,但不可以由子类或者类的对象直接访问

class 的默认访问级别是private,struct的默认访问级别是public


3.类的构造函数、析构函数、赋值函数、拷贝构造函数、移动构造函数

  • 构造函数:一种特殊的类成员函数,无返回值,函数名与类 同名。它提供了对成员变量进行初始化的方法(函数体内赋值或者使用初始化列表),使得在声明对象时能自动的初始化对象。
  • 析构函数:一种特殊的类成员函数,无返回值,无参数,不能重载,用来在系统释放对象前做一些清理工作。
  • 拷贝构造函数:特殊的构造函数,用基于同一类的一个对象构造和初始化另一个对象。(适合如下场景:一个对象以值传递的方式传入函数体、一个对象以值传递的方式从函数中返回,一个对象需要通过另一个对象进行初始化)
  • 赋值函数:重载了赋值运算的类成员函数
  • 移动构造函数:特殊的构造函数。考虑如下场景,当用对象a初始化对象b后,a不再使用了。如果b直接使用a的空间,就避免了新的空间的分配,大大降低了构造的成本。具体的讲,移动构造函数首先接管参数的内存地址空间,然后将其内部所有指针设置为nullptr,并且在原地址上进行新对象的构造,最后调用原对象的析构函数。(因为移动构造函数是对传递的参数进行浅拷贝,也就是说如果参数为指针变量,进行拷贝之后将会有两个指针指向同一地址空间,这个时候如果前一个指针对象进行了析构,则后一个指针将会变成野指针,从而引发错误)

注意!

  • 如果成员是const、引用,或者属于某种未提供默认构造函数的类类型,则必须通过构造函数的初始化列表为这些成员提供初始值。
  • 拷贝构造函数首先是构造函数,体现了初始化作用。而赋值函数体现在赋值,即被赋值的对象肯定是已经存在了的。
  • 默认的拷贝构造函数(编译器帮你合成的)使用浅拷贝(逐bit复制)
  • 移动构造函数的参数是右值引用,而构造函数的参数是左值引用
#include <iostream>
using namespace std;
class 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值