C和C++

c和c++的区别(一)

C语言和C++语言是两种各自独立、各有其特点的程序设计语言,它们之间存在多个区别,以下是一些主要的区别:

面向对象编程。C语言是一种过程式编程语言,主要关注于底层编程和内存管理,而C++是一种面向对象的语言,扩展了C语言的语法,增加了类和对象的概念。

数据类型和变量声明。C语言中的数据类型相对较少,变量声明通常在函数的开头进行。C++除了支持C语言中的数据类型外,还引入了bool类型以及更为复杂的用户自定义类型,如结构体、联合体,并且变量的声明可以在需要时进行,提供了更大的灵活性。

函数定义和参数传递。C语言中的函数定义相对简单,主要关注于实现特定的功能。C++中的函数定义更加复杂,可以支持重载、默认参数、内联函数等特性。C++有严格的参数类型检测,而C语言在函数没有指定的参数列表时,默认可接收任意多个参数。

异常处理和输入输出流。C++支持异常处理,使用对象来实现输入输出,而C语言使用函数来实现输入和输出。C++提供了更丰富的输入输出流对象,如cout和cin,支持更灵活的输入输出操作。

关键字和源文件区别。C++继承了C语言的所有关键字,同时引入了一些新的关键字。C语言的源文件后缀为.c,而C++的源文件名后缀为.cpp。

内存管理和作用域。C语言使用malloc()和free()函数动态申请内存和释放内存,而C++使用new和delete运算符。C++还引入了名字空间(namespace)和Lambda函数等特性。

此外,C++还提供了更严格的类型检查、运算符重载、标准模板库等特性,这些特性使得C++在构建大型、复杂的程序时更加高效和灵活。

c和c++的区别(二)

C和C++是两种不同的编程语言,它们有许多共同点,但也有一些重要的区别。

以下是C和C++之间的主要区别:

1.编程范式C是一种过程式编程语言,而C++是一种混合编程语言,支持过程式和面向对象的编程范式。C语言的代码通常由一系列函数组成,而C++的代码则由类和对象组成。

2.数据抽象C语言不支持数据抽象和封装,而C++支持。C++允许程序员定义自己的数据类型,即类,这些类可以包含数据成员和成员函数。这种数据抽象的方式使得C++可以更好地支持面向对象编程。

3.继承C++支持继承,这是一种面向对象编程的重要特性。继承允许一个类从另一个类继承属性和方法。C语言不支持继承。

4.多态C++支持多态,这也是面向对象编程的重要特性。多态允许程序员在不同的上下文中使用相同的函数名,但实际上调用的是不同的函数。C语言不支持多态。

5.运算符重载C++允许程序员对运算符进行重载,这意味着可以为类定义自己的运算符行为。C语言不支持运算符重载。

6.标准库C++有一个更强大和全面的标准库,包括标准模板库(STL)等。STL提供了许多常用数据结构和算法的实现。C语言的标准库相对较小,只提供了基本的输入/输出、字符串处理和数学函数等。

7.内存管理C++提供了更多的内存管理选项,包括动态内存分配和自动垃圾回收(例如智能指针和RAII技术)。C语言需要手动进行内存管理,这容易导致内存泄漏和越界等问题。

8.代码可读性由于C++支持更多的编程模式和语法结构,它的代码可读性可能不如C语言。C++程序员需要更多地关注代码结构和可读性,以确保代码易于维护和理解。

总之,C和C++之间的区别主要来自它们的编程范式、数据抽象、继承、多态、运算符重载、标准库、内存管理和代码可读性等方面。选择使用哪种编程语言主要取决于具体的应用场景和编程需求。

c和c++的继承关系

1、c++继承了所有的c特性

2、c++以C语言为基础,又增强了面向对象的支持,类型加强,函数加强,异常处理。

3、语言中的变量都必须在作用域开始的位置定义,c++可以在需要使用时再定义。

4、register关键字请求编译器将局部变量存储于寄存器中,但是编译器是可以拒绝的。c++编译器有自己的优化方式,变量也可能存储在寄存器中,所以c++中很少见register,只是为了兼容c语言而已。c语言中无法获取register变量的地址。c++可以取得register变量的地址。

5、c语言中可以定义多个同名的全局变量,C++中不允许定义多个同名的全局变量。

6、struct关键字的加强

c语言中的struct定义了一组变量的集合,并不是一种新的类型(如果要当成新的类型,需要用typedef关键字重命名一下)。c++在类型的加强后,把struct定义为一种全新的类型。

7、c++中所有的标识符都必须显示声明类型,不像c语言中的默认类型,c++则不支持默认类型,不允许不写函数返回类型。

一个小问题:  int f()与 int f(void) 有区别吗?

c++中两个函数具有相同的意义,表示返回值为int的无参函数。c语言中两个函数则不一样,int f()表示返回值为int,接受任意参数的函数,而int f(void)则表示返回值为int的无参函数。

8、const关键字的进化

C语言中const修饰的变量是只读的,使得变量具有只读属性,本质还是变量,它修饰的局部变量还会在栈上分配空间,只在编译期有效,在运行期无效。特别的,const修饰的全局变量在只读存储区分配空间,因此修改了const修饰的全局变量将出现奔溃。const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边,所以const不能定义真正意义的常量。C语言中真正意义的常量只有枚举。通过指针可以修改const修改的变量值。

c++中当碰见const声明时在符号表中放入常量。编译过程中若发现使用常量则直接以符号表中的值替换。符号表是编译器在编译的过程中产生的数据结构。编译过程中若发现下述情况则给对应的常量分配存储空间: 

(1)对const常量使用了extern,即当const常量为全局并且需要在其它文件中使用。(2)当使用 & 操作符对const常量取地址。 

注意:c++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。 原因是为了兼容C语言。

与宏的区别:const常量是由编译器处理,编译器对const常量进行类型检查和作用域检查(宏没有)。编译器中没有宏的概念,宏定义由预处理器处理,单纯的文本替换(字面量),没有类型检查和作用域概念。

const int *p=&x;    底层

int * const p=&x;   顶层

const int *const p=&x; 靠右的const是顶层,靠左的是底层const

9、c++中新增加了bool基础类型和引用

c++(类型增强和面向对象特性)在C语言的基本类型系统之上增加了bool类型(布尔类型),可取的值只有true和false,理论只上占用一个字节。true用1表示,false用0来表示。C语言中用int代替bool不严谨。

c++对三目运算符进行了升级,c语言中三目运算符返回的是变量值,不能当做左值来使用。c++中的三目运算符如果都是变量的话则直接返回变量本身,即可作为右值使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值