20170326_请说出C与C++的区别

20170326_请说出C与C++的区别

1、C与C++的区别?

(1)C语言是一种结构化语言,它是面向过程的,它的重点在于算法和数据结构。

  • C程序设计,首要考虑的是如何通过一个函数过程,对输入进行运算处理从而得到想要的结果输出。
  • 对语言本身来说,它是C++的一个子集。

(2)C++是一种面向对象的语言,它的重点也在于算法和数据结构,但同时更在于对象模型的设计。

  • 也就是说,C++程序设计,首要考虑的是如何构造一个恰当的对象模型,使这个对象模型能够匹配待解决的问题,这样就可以通过获取对象的状态信息得到输出或进行过程控制。

(3)C实现了C++中的过程化控制,而C++相比原来的C其功能有很大程度的增强,拓展了面向对象设计的内容,比如类、封装、继承、多态、虚函数、模板、各种容器与迭代器类等。

(4)总结起来就是,C与C++的最大区别在于它们用于解决问题的思想方法不一样!

2、对C++三大特性的理解?

(1)C++的三大特性是封装、继承、多态。

(2)对于封装,封装可以把有关联的数据和函数封装在一个对象中,形成一个基本单位,各个对象之间相对独立、互不干扰。同时,封装还可以对外隐藏数据、隐藏函数的实现细节,仅留下少量必须的对外接口,使得代码模块化,安全性更高。

(3)对于继承,它包括public、protected、private三种继承方式,它是指从基类派生出派生类,该派生类实现了对基类已有代码模块的继承与扩展,封装和继承都是为了代码重用,也就是增加代码的复用性

(4)对于多态,它包括静态多态性和动态多态性,其中,静态多态性是由函数重载和运算符重载实现的,而动态多态性是通过基类虚函数和基类指针配合使用实现的。总之,多态是指一个接口、多种实现方法的现象。它是为了实现接口重用,增加代码的可扩充性。

3、const常量与define常量的区别?

(1)对于define常量,它定义的是宏,只进行宏替换,它的生命周期止于编译器,它存在程序的代码段,在实际程序中它只是一个常数,一个命令参数,并没有实际的存在。

(2)对于const常量,它存在于程序的数据段,并且在堆栈中分配了内存空间,它在程序中是实际存在的,可以被调用或传递。

(3)const常量具有数据类型,编译器会对const常量进行类型安全检查,比如 int 型常量、double * 型常量等。define常量没有数据类型。

4、C++中const 的作用?

(1)const  用于定义常量,编译器可以对其进行数据类型安全检查。

(2)const 用于修饰函数形参,防止传递引用类型的参数时参数被改变。

(3)const 用于修饰函数的返回值,使得该函数返回的值是常量。

(4)const 用于修饰类的成员函数或数据成员,使其成为静态成员函数或静态数据成员,此时它们便不属于某一个类的对象所有了,而是属于该类的所有对象所共同享有,因此它们只占据一份内存空间。

5、static 静态全局变量普通全局变量的区别?

(1)全局变量的说明之前冠以static 关键字,就构成了静态全局变量。全局变量本身就是静态存储方式,静态全局变量更是静态存储方式。

(2)全局变量的作用域是整个源程序,当源程序是由多个源文件构成时,它在所有的源文件中都是可见的。而静态全局变量只在定义它的源文件内是可见的,在其他源文件内是无效的。

(3)static 全局变量只在定义时被初始化一次,在其他源文件中不可见,可以防止引起错误。

(4)static 局部变量与普通局部变量的区别:

static 局部变量也只是在定义时被初始化一次,下一次使用该变量时,依据的是上一次运算结束后保存的结果值。

(5)static 函数与普通函数的区别:

static  函数在内存中只占据一份存储空间,而普通函数在每个被调用中都维持一份函数拷贝。

6、sizeof() 与strlen() 的区别?

(1)sizeof 是一个运算符,它的结果类型是size_t,它在头文件中被定义为unsigned int 类型。该类型可以保证所建立的最大对象的字节大小。

(2)sizeof 用数据类型做参数,功能是求得该数据类型所占的内存空间大小,即字节数。比如,sizeof 可以用基本数据类型、数组、指针、函数、类、对象等作为它的参数。

(3)strlen 是一个字符串函数,只能用char * 做参数,而且该字符串必须是C风格字符串,也就是说它必须是以 ‘ \0 ’ 作结尾的字符串。功能是求得该字符串的长度。返回的长度大小不包括 ‘ \0 ’。

(4)sizeof 运算符是在编译时计算,而strlen 函数是在运行时计算。

(5)当用数组名arr 作为sizeof 运算符的参数时不退化,求的是编译器为其分配的数组空间大小,不关心里面存放了多少数据。

而当用数组名arr 作为strlen 函数的参数时退化为指针,它只关心里面存储的数据内容,求的是字符串的长度。

7、内联函数与宏定义的区别?

(1)内联函数是一个函数,它的关键字是inline ,它在编译时展开,作函数代码的嵌入工作。宏定义不是函数,它的关键字是define ,它在预编译时展开,作文本替换的工作,不进行事先计算,因此常常需要添加小括号进行整体单位划分,以防止出现参数的二义性问题。

(2)内联函数可以进行数据类型检查、语句是否正确等编译功能,而宏不具备这样的功能。

8、指针常量与常量指针的区别?

(1)对于常量指针,它定义的是一个指针,而这个指针指向的对象是一个常量,不可修改。但是这个指针可以根据具体需要指向不同的常量对象。

  • 指针指向的对象是常量,那么这个对象不能被更改。

  • 指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值。

举例如下:

int a=100;
const int b=200;
const int *p=&a;//指向a,不能通过p来修改a的值,比如*p=102;是错误的。
p=&b;//指向常量b,也不能通过p来修改b的值。但是p的指向已经发生了变化。

(2)对于指针常量,它定义的是一个常量,而这个常量是指针类型的,也就是说这个指针只能够指向同一个对象,而不能够修改它的指向。但是,可以通过这个指针来修改它所指向的对象的内容。
  • 指针常量的值是指针,这个值因为是常量,所以不能被赋值。

  • 因为指针常量是一个常量,所以在声明的时候一定要给它赋初始值。一旦赋初值,以后这个常量再也不能指向别的地址。

  • 虽然指针常量的值不能变,可是它指向的对象是可变的,因为我们并没有限制它指向的对象是常量。

举例如下:

int a=100;
const int a2=102;
const int b=200;
int * const p=&a;//指针常量p指向a,可以通过p来修改a的值。

p=&b;//指针常量定义的时候已经被初始化指向a了,因此不能再修改它的指向了,导致错误!

// 要是这种情况:
// int * const p=&a2;//指针常量p指向常量a2,不能通过p来修改a2的值。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值