C++相比于C语言增加了哪些概念?

C++相比于C语言增加了哪些概念?

作者 将狼才鲸
创建日期 2025-06-17

  • 目标受众:熟悉C语言,对C++完全不了解,但又想熟悉一下C++语言的人;

  • 参考网址:

  • C++虽然是面向对象的,但是它的第一个函数,main()函数却是和C语言一样面向过程的;

  • 基础概念:

    • 类 Class:例如声明一个Class Demo;类似于C语言中的结构体;声明表示还没有创建实体,不占内存;
    • 私有变量 private:类似于C语言模块内部static全局变量;
    • 公共变量 public:类似于C语言模块中接口函数;
    • 构造函数:Demo (int aa) {a = aa;} 定义类时会自动执行的初始化函数,C语言中没有此概念;
      • Demo(int aa = 100): a(aa) {} 可以直接用默认值初始化;
      • 构造函数中: 冒号后面的a(aa) 类似于函数的这种模式其实并不是函数,而只是赋值,类似于aa = a;
    • 析构函数,~Demo:同上,在类被delete时自动调用;
    • Class声明中直接实现函数: void geta(int b) {a = b;} 类似于C语言.h头文件中的inline内联函数;
    • 友元函数 friend:稍微突破模块化的结构;类似C语言中的全局变量和全局函数;
      • 可以简单的理解为即使定义了多个类,但里面每个类中执行友元函数都是执行的同一个全局接口函数;
      • 在类外未定义该类时也能直接调用类里的函数,而该函数不能操作Class里面的局部变量;
    • 命名空间 namespace和两个冒号::的操作符:using namespace std; std::cout 一组类组成的模块集合,并且里面有些函数是无需定义和初始化就能直接使用的;同时命名空间也可以用来避免命名冲突;
    • 域的概念:可以把一个.cpp文件就当成一个域,类似于把一个.c文件当成一个模块;
    • 基类派生类引用转换(父类和子类):static_cast;类似于C语言中各种结构体入口地址的计算和结构体变量类型强制转换;
    • 数据类型转换:例如static_cast<float> a;其中a变量是double类型;static_cast<float> a就类似于C语言中的(float)a;
    • 引用&:可以简单的将其当成C语言中的指针*,但是它们还有些不一样,需要在实际使用中慢慢体会;
      • func(Demo &d); d.a; 使用引用的元素时,它的元素调用不用->,而使用. 和C语言中有点不一样;
      • 引用在定义时必须同步初始化,类似于C语言中不允许出现野指针,指针必须要赋分配以后的初值;
      • 引用初始化后不能再更改对象,而指针可以指向这个指向那个,也可以自增自减等;
    • 操作符重载 operator+ =等:例如实现两个类的加减乘除运算等;
    • this->:在类的实现函数中要调用自己类的其它变量时,使用this->;
    • 派生:使用:冒号派生成子类,类似于C语言中结构体内嵌套结构体,被嵌套在内部的是父类,外面更大的结构体是子类;
      • 与C语言不同的是,子类不光继承了父类,还可以改写和重载父类中的函数(C++中称为方法);
    • 继承:父类的初始化方法或函数在子类中能直接用,这叫继承;
      • 多继承,一个子类可以包含多个父类;
    • 三大类型(封装、继承、多态):把一个Class当成一个全私有的结构体,要读写变量只能通过调用函数来实现,这就是封装;
      • 父类(基类)中的函数可以被子类(派生类)重写或重载,这个就叫多态;
    • 虚类型 virtual:因为子类中经常会重载父类中的函数,所以干脆父类中把可能会重载的函数加上virtual 来指明,有时甚至自己干脆都不实现了;
    • 类的定义 new:可以直接Class AA{}; AA a; 也可以AA *p_a = new AA; 需要有个概念是new一个类时里面的构造函数会自动运行,这和C语言很不一样;
    • 名词概念:类中的内容称为类的成员,变量称为类的属性或成员变量,类中的函数称为类的方法或者成员函数;因此,忘掉C语言中的全局变量、私有变量、函数的概念,开始使用属性和方法;
    • protected:和private私有类似;
    • 类的实例化:用类创建对象,类似于C语言中的定义(与定义相对应的就是声明);
    • 类空间的释放 delete:
    • auto变量:自动识别数据的类型;
    • 增加nullptr空指针关键字;
    • 异常处理:try、catch、throw
    • 泛型编程,模板template:
      • template ,有模板函数和模板类;类似于C语言中用宏定义拼接生成多个类似的结构体;
      • 模板需要被实例化;
    • 标准模板库(STL):容器vector、list等,迭代器iterator等
    • Lambda 表达式:auto func = \[\](int x) { return x * x; };
    • explicit关键字:用于修饰单参数构造函数或转换构造函数,禁止编译器进行隐式类型转换,避免意外的行为
相关推荐
cjhbachelor6 小时前
c++继承
c++
肩上风骋6 小时前
C++14特性
开发语言·c++·c++14特性
Bluetooth7308 小时前
c语言一维数组
c语言
蒸蛋一级爱好者8 小时前
TFTP协议
单片机·嵌入式硬件
芯巧电子9 小时前
11. IC实例新增子类别 I 芯巧Cadence 25.1新功能深入学习
科技·cadence·软件·allegro·orcad
优信电子9 小时前
STM32/C51驱动 DHTC11 温湿度传感器
stm32·单片机·嵌入式硬件·c51·温湿度传感器·dhtc11·环境测量
QiLinkOS9 小时前
【从实验室到商业战场:发明专利如何重塑科技与企业的共生生态】
大数据·c语言·数据结构·c++·人工智能·单片机·算法
周周记笔记9 小时前
【元器件专题】三极管-如果B极给一个方波信号,那么V0输出也可以设计为一个方波信号
单片机·嵌入式硬件
Irissgwe10 小时前
c++11(lambda表达式与包装器、线程库)
c++·c++11·lambda表达式·线程库·包装器·互斥量库·条件变量库
HPT_Lt10 小时前
ZCC10012支持100V/1.2A 超低静态电流同步降压转换器 兼容LM5164
单片机·嵌入式硬件