您好,欢迎访问三七文档
第1章C与C++的区别C语言是结构化和模块化的面向过程的语言C++是面向对象的程序设计语言,由C语言扩展而来,保留了C语言的优点,添加了面向对象编程的支持,具有面向对象的程序设计语言的三大特性:封装性、继承性和多态性。带有面向对象功能的C语言增强版本含类的C第1章C与C++的区别第1章C与C++的区别•变量定义位置与作用域•名字空间•结构体变量•输入输出•动态内存分配(new和delete)•引用•const修饰符•函数原形•内联函数•带缺省参数的函数第1章C与C++的区别变量定义位置与作用域•C++中,允许变量定义语句在程序中的任何地方,只要在是使用它之前就可以;而C语言中,必须要在函数开头部分。而且C++允许重复定义变量,C语言也是做不到这一点的。•通常情况下,如果全局变量与局部变量同名,那么局部变量在其作用域内具有较高的优先权。•访问被屏蔽的全局变量使用作用域操作符“::”第1章C与C++的区别•名字空间:面向对象程序设计的重要概念。它为用户提供一个空间,在里面可定义自己的函数或类,当定义的函数或类和他人定义的重名时,可用名字空间来区分。•名字空间用花括号把文件的一部分括起来,并以关键字namespace开头。名字空间namespacens1{floata,b,c;fun1(){……}}第1章C与C++的区别•花括号括起来的部分称声明块。声明块中可包括:类、变量、函数等。•在域外使用域内成员时,需加上名字空间名作为前缀,后面加上域操作符“::”。•最外层的名字空间域称为全局名字空间域,即文件域。•名字空间域可分层嵌套,同样有分层屏蔽作用。namespacen1{namespacen2{//名字空间嵌套classmatrix{……}//名字空间类成员matrix//……}}访问matrix,可写:n1::n2::matrix。第1章C与C++的区别•标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。•使用标准C++库中的组件,只要写一个using指示符:usingnamespacestd;•注意:如果使用了名空间std,则在使用#include编译预处理命令包含头文件时,必须去掉头文件的扩展名.h,否则会出错。第1章C与C++的区别结构体变量在C++中,struct结构体支持成员函数的定义,C中不行如果在C的struct中定义函数,编译时会显示一个“field‘functionname’declaredasfunction”错误在C语言中,声明一个结构体类型A之后,使用下面的语句来定义结构体变量a:structAa;而C++中可以省略structC++中联合名、枚举名也可在定义后独立地作为类型名使用第1章C与C++的区别/*ch3_10.c*/structA{inta;intb();};intmain(){structAc;c.a=2;return0;}编译错误:“ch3_10.c:5:error:field'b'declaredasafunction”C++标准可以通过编译第1章C与C++的区别输入输出–C中用scanf(),printf()来完成输入输出操作inta;scanf(%d,&a);printf(您输入的数值是%d\n,a);–C++中全局对象cin、cout来输入输出,比C更方便,而且类型检查机制更加完善cout“输出内容”…;//cout为标准输出流对象(默认输出到显示器)cin“输入内容”…;//cin为标准输入流对象(默认从键盘输入)第1章C与C++的区别•C++中的使用方式–new申请–delete释放•C中的使用方式–malloc()申请–free()释放•使用:–int*p=(int*)malloc(sizeof(int));–int*p=newint;动态内存分配第1章C与C++的区别•new运算符指针变量=new数据类型;如:int*p;p=newint;•new从堆内存中为程序分配一块内存空间,并返回指向该内存的首地址,该地址存放于指针变量中。•堆内存可以按照要求进行分配,若程序在运行中不再需要由new分配的内存空间,则可把先前占用的内存空间释放。第1章C与C++的区别•delete运算符delete指针变量;如:deletep;(1)用new获取的内存空间,必须用delete进行释放;(2)对一个指针只能调用一次delete;(3)用delete运算符作用的对象必须是用new分配的内存空间的首地址第1章C与C++的区别用new建立数组类型的变量指针变量=new数据类型[数组大小];如:int*p=newint[5];此时指针变量指向第一个数组元素的地址。使用new分配数组时,不能提供初始值。使用new建立的数组变量由delete释放。delete[]指针变量;如:delete[]p;第1章C与C++的区别•在C++中引用用于在程序的不同部分使用两个以上的变量名指向同一地址,使对其中任一变量的操作实际上都是对同一地址单元进行的。被声明为引用类型的变量名是实际变量名的别名。•引用运算符为&,声明引用的一般形式为:–数据类型&引用变量名=变量名;–或数据类型&引用变量名=变量名;–或数据类型&引用变量名=变量名;•对引用进行操作,实际上就是对被引用的变量进行操作。引用不是值,不占存储空间,声明引用时,目标的存储状态不会改变。引用一旦被初始化,就不能再重新赋值。引用第1章C与C++的区别说明:(1)一个变量被声明为引用时必须进行初始化,除非这个引用是用作函数的参数或返回值,为引用提供的初始值应为变量(包括对象)。(2)由于引用不是变量,所以,不能说明引用的引用,也不能说明数组元素的类型为引用数组,或指向引用的指针。例如:int&a[5];//错误int&*p;//错误由于指针也是变量,因此可以说明对指针变量的引用。例如:int*a;int*&p=a;intb;p=&b;//a指向变量b第1章C与C++的区别(3)要注意区分引用运算符和地址运算符的区别。例如:intnum=50;int&ref=num;int*p=&ref;(4)可以用一个引用初始化另一个引用。例如:intnum=50;int&ref1=num;int&ref2=ref1;ref2=100;//num被修改为100,其中ref2也是对num的引用。第1章C与C++的区别(5)可把函数的参数说明成引用以建立函数参数的引用传递方式。(6)有空指针,无空引用第1章C与C++的区别引用举例#includeiostreamUsingnamespacestd;intmain(){intnum=50;int&ref=num;ref+=10;coutnum=numendl;coutref=refendl;num+=40;coutnum=numendl;coutref=refendl;return0;}第1章C与C++的区别(回顾)函数的参数传递当函数未被调用时,C++编译系统并没有给函数的形参分配相应的内存空间,函数的形参更不会有实际的值。只有在函数被调用时,C++编译系统这时才为形参分配实际的存储单元,并将实参与形参结合。实参可以是常量、变量或表达式,其类型必须与形参相符。函数的参数传递,指的就是形参与实参结合(简称形实结合)的过程。形实结合的方式有传值调用,传地址调用和引用调用三种。第1章C与C++的区别1.传值调用值调用是指当发生函数调用时,编译系统为形参分配相应的存储空间并且直接将实参的值复制给形参,这样形参和实参就各自拥有不同的存储单元,且形参是实参的副本。因此,值调用过程是参数值的单向传递过程,一旦形参获得了与实参相同的值就与实参脱离关系,以后不论形参发生多大的改变,都决不会反过来影响到实参。第1章C与C++的区别2.地址传递。所谓地址传递,即指针变量作为函数参数。主调函数中实参的内容是某一变量的内存地址,被调函数的形参必须是与实参相同类型的指针变量,用以接受由实参传过来的地址。这样实参与形参指向相同的内存单元,一旦被调函数中形参所指内容发生变化,意味着实参所指内容也发生相应的变化,函数返回后主调函数就可获得变化后的结果。第1章C与C++的区别3.引用调用引用是一种特殊类型的变量,可以被认为是某一个变量的别名。通过引用名与通过被引用的变量名访问变量的效果是一样的。这就是说,对形参的任何操作也就直接作用于实参。如果我们想使子函数中对形参所做的任何更改也能及时反映给主函数中的实参(即希望形参与实参的影响是互相的或称是双向的),还可以采用第三种参数传递方式——引用调用。第1章C与C++的区别•#definePI3.1415926//C中的做法•constfloatPI=3.1415926;//C++中的做法•这个常量是有类型的,它有地址,可用指针指向这个值,但不能修改它。C++建议用const取代#define定义常量。const修饰符第1章C与C++的区别注意:(1)使用const修饰符定义常量时,必须初始化;(2)常量一旦被定义,在程序中任何地方都不能再更改。(3)与#define定义的常量有所不同,const定义的常量可以有自己的数据类型,这样C++编译程序可以进行更加严格的类型检查,具有良好的编译时的检测性。(5)函数参数也可以用const说明,用于保证实参在该函数内部不被改动。例如,通过函数max求出整型数组a[100]中的最大值,函数原型应该是:intmax(constint*pa);这样做的目的是确保原数组的数据不被破坏,即在函数中对数组元素的操作只许读,不许写。第1章C与C++的区别(1)指向常量的指针指向常量的指针是指一个指向常量的指针变量。charaa[]=“abcd”;constchar*pc=aa;声明指向常量的指针变量pc,它指向一个字符串常量由于使用了const,不允许改变指针所指的常量,因此以下语句是错误的:pc[3]='x';但是由于pc是一个指向常量的普通指针变量,不是常指针,因此可以改变pc的值。例如以下语句是允许的:pc=jkkk;const与指针组合使用第1章C与C++的区别(2)常指针常指针是指指针本身,而不是它指向的对象声明为常量。例如:char*constpc=abcd;//常指针这个语句的含义为:声明一个名为pc的指针变量,该指针是指向字符型数据的常指针,用“abcd”的地址初始化该常指针。创建一个常指针,就是创建不能移动的固定指针,但是它所指的数据可以改变。例如:pc[3]='x';//合法pc=dfasdfa;//不合法第1章C与C++的区别(3)指向常量的常指针整个指针本身不能改变,它所指向的值也不能改变。要声明一个指向常量的常指针,二者都要声明为const。例如:constchar*constpc=abcd;//指向常量的常指针这个语句的含义为:声明一个名为pc的指针变量,它是一个指向字符型常量的常指针,用“abcd”的地址初始化该指针。以下两个语句都是错误的:pc[3]='x';//错误,不能改变指针所指的值pc=dfasdfa;//错误,不能改变指针本身第1章C与C++的区别const与引用组合使用只有一种情况:指向常量的引用不能通过引用修改它所引用的变量。例如:inta=3;constint&ra=a;ra=5;//错误,不能通过常引用改变所引用的变量的值a=4;//正确,a仍是变量第1章C与C++的区别函数原型C++要求为每一个函数建立原型,用以说明函数的名称、参数个数及类型和函数返回值的类型。其主要目的是让C++编译程序进行类型检查,即形参与实参的类型匹配检查,以及返回值是否与原型相符,以维护程序的正确性。所以应养成将声明与定义分别编写的编程习惯。函数原型与函数的定义要在函数的返回类型,函数名和参数的类型及数量这三条线上保持一致。在写函数原型时,可以省略形参的名字,因为参数名对编译器没有意义,但如果取名恰当的话,这些名字可以起到提示参数用途的作用。第1章C
本文标题:C与C++的区别
链接地址:https://www.777doc.com/doc-2907383 .html