hwaityd的小窝

Loading...
随笔 - 26,  文章 - 0,  评论 - 0,  阅读 - 447

C语言和C++是两种密切相关但又有明显区别的编程语言。C++是在C语言的基础上发展起来的,它不仅完全兼容C语言,还增加了面向对象编程、泛型编程等特性。

  1. C语言与C++的区别

    • C语言是一种过程式编程语言,而C++是支持多范式编程的语言,包括过程式编程、面向对象编程和泛型编程。
    • C++支持类和对象,提供了封装、继承和多态等面向对象的特性。
    • C++支持模板,允许泛型编程。
    • C++支持异常处理。
    • C++支持新的数据类型,如bool、wchar_t等。
  2. 面向过程与面向对象的区别

    • 面向过程强调的是函数和过程,程序由一系列函数调用组成。
    • 面向对象强调的是对象和消息,程序由对象的交互组成。
    • 面向对象提供了更好的代码复用性和模块化。
  3. C++新语法(存储结构)

    • 引用:引用是某个已存在变量的另一个名字,它本身不占用内存空间。
    • 特点:引用必须在定义时被初始化,一旦初始化后不能改变其指向。
  4. 右值引用(C++11特性)

    • 右值引用允许程序员直接操作即将销毁的对象的资源,常用于移动语义和完美转发。
  5. 引用与指针的区别

    • 引用是某个变量的别名,一旦初始化后不能改变其指向。
    • 指针是一个变量,存储了另一个变量的地址,可以改变其指向。
  6. 引用数组

    • 数组的引用实质上是一个指向数组首元素的指针。
  7. bool类型

    • bool是C++中新增的数据类型,用于表示布尔值true和false。

语法规则

  1. 命名规则:标识符只能包含字母、数字和下划线,且不能以数字开头。
  2. 作用域
    • 函数原型作用域:函数原型中定义的变量仅在该函数原型中可见。
    • 局部作用域:在函数内部定义的变量仅在该函数内部可见。
    • 类作用域:在类中定义的成员仅在该类内部可见。
    • 命名空间作用域:在命名空间中定义的名称仅在该命名空间中可见。
  3. 作用域与可见性问题:作用域决定了变量的可见性和生命周期。
  4. 关键字使用
    • extern:用于声明全局变量或函数,可以被多个文件共享。
    • static:用于声明局部静态变量或静态成员变量,其生命周期贯穿整个程序。

重载

  1. 重载:函数名相同,但参数列表不同。
  2. 重写:派生类中重写基类的虚函数。
  3. 友元:友元函数或友元类可以访问类的私有和保护成员。
  4. 函数重载:在同一个作用域内,函数名相同但参数列表不同。
  5. 二义性问题:当函数调用不明确时,编译器无法确定调用哪个函数。
  6. 运算符重载
    • 友元运算符重载:作为类的友元函数重载运算符。
    • 成员函数运算符重载:作为类的成员函数重载运算符。
  7. 不可重载的运算符:如.::.*?:等。

函数默认参数

  1. 语法:在函数定义时为参数指定默认值。
  2. 特性:简化函数调用。
  3. 二义性问题:当函数调用可以匹配多个重载版本时,会产生二义性。

内联函数

  1. 声明形式:使用inline关键字声明。
  2. 工作原理:在编译时将函数体插入到每个调用点,减少函数调用的开销。
  3. 递归:内联函数通常不用于递归,因为递归会增加代码体积。

面向对象

  1. 封装:将数据和操作数据的函数组合在一起,隐藏内部实现细节。
  2. 继承:允许新类(派生类)继承现有类(基类)的特性。
  3. 多态:允许不同类的对象对同一消息做出响应。

封装

  1. 类与对象:类是对象的蓝图,对象是类的实例。
  2. 类的语法体系:定义了如何声明类、成员变量和成员函数。
  3. 抽象的过程:将复杂性隐藏在接口后面。
  4. 封装过程:通过访问修饰符(public、private、protected)控制对类成员的访问。
  5. 访问权限:控制成员的可见性和访问性。

封装::语法::函数

  1. 构造函数:初始化对象的特殊函数。
  2. 拷贝构造
    • 使用场景:当需要通过一个对象来初始化另一个对象时。
    • 深拷贝:逐个复制对象的每个成员。
    • 浅拷贝:仅复制对象的指针或引用。
  3. 析构函数:清理对象使用的资源。

对象

  1. 对象的大小:取决于对象中成员变量的大小和对齐。
  2. 空类对象大小:通常为1字节,以确保不同的类类型。
  3. 无名对象:通常用于临时对象,不占用额外内存。

类::成员

  1. 静态(static)成员:被同类所有对象共享。
  2. 静态成员的生命周期:从程序开始到程序结束。
  3. 静态成员的调用规则:通过类名直接访问。
  4. 常成员:只读成员。
  5. 常数据成员:通常与初始化列表一起使用。
  6. 初始化参数列表:在构造函数中初始化成员变量。
  7. 常函数成员:使用const修饰的成员函数。
  8. this指针:指向当前对象的指针。

类的组合

  1. 类的组合:一个类包含另一个类的对象。
  2. 构造函数的调用顺序:先调用成员对象的构造函数,再调用包含类的构造函数。

模板

  1. 函数模板:允许编写与数据类型无关的函数。
  2. 类模板:允许编写与数据类型无关的类。
  3. 非类型模板:模板参数可以是非类型参数。
  4. 标准模板库STL:提供了一套通用的模板类和函数。

标准模板库

  1. 六大组件:容器、迭代器、算法、仿函数、适配器、空间配置器。
  2. 容器及使用:如vectorlistmap等。
  3. 迭代器:提供了一种访问容器中元素的方法。
  4. 空间配置器及其使用:管理容器的内存分配。
  5. 算法:如排序、搜索等。
  6. 仿函数:允许函数作为参数传递。
  7. 适配器:如迭代器适配器、函数适配器等。

容器

  1. 序列式容器
    • vector:动态数组,存储连续的元素。
    • deque:双端队列,可以高效地在两端插入和删除。
    • list:双向链表,可以高效地在任意位置插入和删除。
  2. 关联式容器
    • set:有序集合,不允许重复。
    • multiset:无序集合,允许重复。
    • map:键值对集合,键唯一。
    • multimap:键值对集合,键可以重复。

继承

  1. 什么是继承:一种创建新类的方式,新类继承现有类的属性和方法。
  2. 继承的特性:传递性、不对称性。
  3. 继承的分类:单继承、多继承。
  4. 基类成员调用的函数的二义性问题:当派生类和基类有同名函数时。
  5. 菱形继承:一个类继承了两个有共同基类的类。
  6. 解决菱形继承:使用虚继承。
  7. 不可被继承:构造函数、拷贝构造函数、析构函数、友元、静态成员。
  8. 继承方式:public、private、protected。
  9. 继承后的访问权限:继承方式决定了成员在派生类中的访问权限。
  10. 继承的构造、析构顺序:先调用基类的构造函数,后调用派生类的构造函数;析构顺序相反。
  11. 继承与组合类:构造函数的顺序。
  12. 模板的继承:模板类可以被继承。
  13. 基类的静态成员被继承的特性:不可被继承,但可以被派生类对象共享。
  14. 类型兼容性原则:派生类对象可以被当作基类
posted on   hwaityd  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示