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关键字:用于修饰单参数构造函数或转换构造函数,禁止编译器进行隐式类型转换,避免意外的行为
相关推荐
青少儿编程课堂6 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会C/C++考级:分层图最短路解析
c++·python·算法·bfs·信息学竞赛
FlightYe16 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
蹊黎17 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
by2099917 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
Rover Ramble18 小时前
C++ 用互斥锁实现读写锁
开发语言·c++
你怎么知道我是队长18 小时前
C++零基础入门第2周:数据类型、运算符与表达式完全指南(附20段可运行代码+避坑清单)
c++
say_fall18 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
雪落漂泊19 小时前
C++算法 滑动窗口篇(下)
开发语言·c++
爱聊灵光的维C19 小时前
从看见世界到重构认知:在视觉与硬件的交汇处,寻找我们这代人的北极星
c语言·物联网·计算机视觉·重构·硬件工程·射频工程
AI+程序员在路上19 小时前
RV1126B 上支持的模型及全流程应用--从CNN及语音到 LLMVLM 与跨平台选型
linux·c语言·人工智能