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关键字:用于修饰单参数构造函数或转换构造函数,禁止编译器进行隐式类型转换,避免意外的行为
相关推荐
bai54593629 分钟前
STM32 定时器(Timer)
stm32·单片机·嵌入式硬件
代码游侠3 小时前
日历的各种C语言实现方法
c语言·开发语言·学习·算法
草莓熊Lotso3 小时前
unordered_map/unordered_set 使用指南:差异、性能与场景选择
java·开发语言·c++·人工智能·经验分享·python·网络协议
咔咔咔的5 小时前
1930. 长度为 3 的不同回文子序列
c++
Cinema KI10 小时前
吃透C++继承:不止是代码复用,更是面向对象设计的底层思维
c++
Dream it possible!12 小时前
LeetCode 面试经典 150_二叉搜索树_二叉搜索树中第 K 小的元素(86_230_C++_中等)
c++·leetcode·面试
玩转C语言和数据结构13 小时前
C语言编程入门攻略(最新学习路线,适合新手小白)
c语言·c语言入门·c语言下载·c语言知识点总结·c语言自学·c语言教程·c语言怎么学
Bona Sun14 小时前
单片机手搓掌上游戏机(十四)—pico运行fc模拟器之电路连接
c语言·c++·单片机·游戏机
学生哥-_-14 小时前
STM32点亮WS2812 RGB灯板展示像素图片(一种较方便的取色值数据的方法)
stm32·单片机·嵌入式硬件
oioihoii14 小时前
性能提升11.4%!C++ Vector的reserve()方法让我大吃一惊
开发语言·c++