两者的区别:
C++确实是对 C 语言的扩充和延伸,并且对 C 语言提供后向兼容的能力。
C 语言是面向过程语言,而 C++是面向对象语言。
实验:把大象装进冰箱:
角色:C语言:像一个手工工具包,需要手动操作每一步。
C++:像一个自动化工具箱,提供封装好的工具和智能机制。
步骤 1:打开冰箱门 步骤 2:把大象装进冰箱 步骤 3:关闭冰箱门
通过上面三个步骤,了解C 与 C++ 的核心差异:
步骤 | C 语言 | C++ |
---|---|---|
资源管理 | 手动分配和释放(malloc/free ) | 自动管理(RAII、智能指针) |
错误处理 | 返回错误码或 NULL | 异常机制(try/catch ) |
代码组织 | 函数和结构体 | 类、封装、继承、多态 |
抽象能力 | 低(面向过程) | 高(面向对象、泛型编程) |
安全性 | 依赖程序员自律 | 类型安全、访问控制(private ) |
- 大象(数据):在 C 中是原始的结构体,在 C++ 中是封装了行为的对象。
- 冰箱(容器):在 C 中需手动管理状态,在 C++ 中通过类的封装和析构函数实现自动化。
- 工具包:C 是手动螺丝刀,需要精准操作;C++ 是电动工具,提供高效和安全保障。
- 结论:C++ 在 C 的基础上增加了 抽象、封装、自动化资源管理 等特性,就像在手工工具箱(C)的基础上,升级为智能工具箱(C++)。两者都能完成任务,但 C++ 通过减少手动操作,显著提高了开发效率和代码安全性。
面向过程:C#
面向过程编程就是
分析出解决问题的步骤,然后把这些步骤一步一步的实现
,使用的时候一个一个的依次调用就可以了。
面向对象:C++
面向对象编程就是把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了
描述某个事物在整个解决问题的步骤中的行为
。
面向过程语言:
性能比面向对象高,比如单片机、嵌入式开发、 Linux/Unix 等一般采用面向过程开发,性能是最重要的因素。
面向对象语言:
易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统, 使系统更加灵活、更加易于维护。
关键字不同:C有32个关键字,C++有63个关键字。

C++的后缀名也不同于C:C++后缀.cpp。
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的参。(C 语言不支持缺省参数)。
void Hello(int a,int b=100) //半缺省参数,只能从参数列表后面开始放
{
cout << b << endl;
}
void hello1(int a=100,int b=200)//全缺省参数,全部参数都含有默认值。
{ cout << a << b << endl; }
缺省值必须是常量或者全局变量。缺省参数必须通过值参或常参传递。
函数重载:在同一作用域中,声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,返回值类型可以相同也可以不同,常用来处理实现功能类似数据类型不同的问题。(C 语言没有函数重载,C++支持函数重载)。
void Function_Overloading()//函数重载的形式,函数名相同,但参数不同
{ ......}
int Function_Overloading(int a)
{........}
int Function_Overloading(int a,int b)
{ ....... }
int Function_Overloading(int b,int a,int c)
关于malloc、free、&& new、delete的联系与区别:
malloc()
和
free()
是
C
语言中动态申请内存和释放内存的标准库中的函数。而
new
和
delete
是
C++
运算符、 关键字。new
和
delete
底层其实还是调用了
malloc
和
free
。
区别:(1)malloc
和
free
是函数,
new
和
delete
是运算符。
(2)
malloc
在分配内存前需要大小,
new
不需要。
注意!!!在C和C++中,使用
malloc
和
new
申请动态内存时,它们分配的空间均位于
堆区(Heap),而非栈区(Stack)。
内存存储划分:
栈区(Stack):用于存储非静态局部变量、函数参数、返回值等,由编译器自动管理内存的分配和释放,其生命周期与作用域绑定。
堆区(Heap):用于动态内存分配,需手动管理(如通过malloc/free
或new/delete
),内存的分配(malloc、new)和释放(free、delete)由程序员控制,生命周期独立于作用域。
int *p = (int*)malloc(sizeof(int)); // p指向堆区的内存
int *p = new int(10); // p指向堆区的内存,并初始化为10
无论是C的malloc
还是C++的new
,它们申请的内存均位于堆区,需要程序员手动管理生命周期。而栈区的内存分配由编译器自动完成,仅用于存储局部变量等短期数据,两者的用途和管理方式存在本质差异。
作用域:C 语言中作用域只有两个:局部,全局。C++中则是有:局部作用域,类作用域,名字空间作用域三种。
C++、Qt Creator、Qt的区别与关系:
(1)C++是语言、Qt Creator是集成开发环境、Qt是应用程序框架(库)。
(2)Qt Creator集成C++编译器、Qt是C++语言开发的程序框架。
(3)(Qt Creator) + (Qt) + (C++) = 应用程序。
命名空间:为什么要使用using namespace std?这是我刚学C++一直疑惑的一个问题。
std为标准命名空间,标准C++库的所有标识符均在std中定义,因此使用标准C++库时需要使用命名空间std。
在C++中,using namespace std的作用是将标准库命名空间std中的所有标识符(如cout、vector等)引入当前作用域,使其可以直接访问,而无需通过std::前缀。