从C到C++的基础知识了解、Qt与C++的联系

两者的区别: 

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++中,使用 mallocnew申请动态内存时,它们分配的空间均位于 堆区(Heap),而非栈区(Stack)。

内存存储划分:

栈区(Stack):用于存储非静态局部变量、函数参数、返回值等,由编译器自动管理内存的分配和释放,其生命周期与作用域绑定。

堆区(Heap):用于动态内存分配,需手动管理(如通过malloc/freenew/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::前缀。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值