第02章-C++(非类部分)对C的扩充_第1页
第02章-C++(非类部分)对C的扩充_第2页
第02章-C++(非类部分)对C的扩充_第3页
第02章-C++(非类部分)对C的扩充_第4页
第02章-C++(非类部分)对C的扩充_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2.1I/O操作2.2强类型机制2.3引用2.4内联函数2.5指针2.6操作字符串数据的标准函数库2.7块内的说明2.8new和delete运算符2.9作用域访问运算符::2.10const的扩充作用2.11函数重载2.12参数个数不定的函数通常C++编译系统(例如IDE)可以根据文件的扩展名来区分C和C++:是.C的认为是C程序,.CPP的是C++程序。C++是C的超集,掌握C是掌握C++的先决条件。C++中超出C的部分主要是面向对象的程序设计,也是产生C++的根由。但是C++非类部分对C的语法也作了扩充和很少的“更新”,例如C语言允许一个全局变量多次定义,C++中则会引起错误。2.1I/O操作 C++完全支持C的I/O函数集,但C++的I/O类库和I/O操作内容也很多,需要分阶段逐步去掌握。这里先举两个简单的实例:C++中的out<<相当于C中的输出函数printf();C++中的cin>>

相当于C中的输入函数scanf()。//C++中使用cin和cout举例main(void){charstr[80];cout<<"enterastring:";cin>>str;//readastring}C++是强类型的,在C中不强制使用原型化函数,在C++中这一要求是必须的、强制的,所有函数必须使用原型。C++可以在函数原型中采用默认值,例如:fn(intx,floaty=1.0,intz=3);默认的值必须从右到左敷值起,下面的例子是非法的:fn(intx,floaty=1.0,intz);当调用函数时,默认的值也要从右到左计算起。如果函数原型为:fn(intx,floaty=1.0,intz=3),则调用fn(1,2)相当于调用fn(1,2.0,3)。2.2强类型机制 引用作为对象的别名而使用,对引用的改动实际是对对象的改动。当建立引用时,程序用另一个变量或对象名字初始化它。 引用的声明形式为

<类型标识符>&引用名=对象名 或<类型标识符>&引用名=对象名

其中: (1)引用名必须遵循变量的命名规则。(2)前面的数据类型就是它所引用对象的数据类型。引用不是值,不占存储空间,声明引用时,对象的存储状态是不会改变的。2.3引用//例2-1EX2_1.cpp演示“引用”的用法#include"iostream.h"voidswap(int&a,int&b); //a、b定义为引用参数main(void){intx1=10,x2=20;cout<<x1<<""<<x2<<"\n"; //显示1020

swap(x1,x2); //交换所引用的变量的值cout<<x1<<""<<x2<<endl; //显示2010return0;}voidswap(int&a,int&b){intt;t=a;a=b;b=t;}程序执行后的屏幕显示:10202010//例2-2EX2_2.cpp演示“引用”的扩充用法#include"iostream.h"main(void){intx1,x2;int&iRef=x1; //定义一个“引用”:使iRef成为x1的别名x1=10;cout<<x1<<""<<iRef;//显示1010x2=121;

iRef=x2; //等效于x1=x2(不是x2的地址)cout<<"\n"<<x1<<endl;//显示121return0;}

内联函数是在编译时将函数体嵌入在每一个调用语句处,节省了参数传递、系统栈的保护与恢复等的开销。 内联函数的定义形式为:

<inline><类型标识符><内联函数名>(形参表){ 函数体}2.4内联函数//例2-3EX2_3.cpp内联函数#include<iostream.h>#include<iomanip.h>inlineintmax(inta,intb) //定义内联函数{

if(a>b)returna;elsereturnb;}voidmain(){inta,b,c,d;a=210;b=150;c=20;d=max(a,b);

//编译时被替换为max函数体语句d=max(d,c);

//编译时被替换为max函数体语句cout<<"Thebiggestof"<<""<<a<<""<<b<<""<<c<<"is"<<d;}内联函数在C++中几乎取代了C的#define宏,因为它更灵活。并且没有什么副作用。宏的副作用举例: #definesqr(x)x*x //定义计算x平方的宏 inty=sqr(2+3) //计算5的平方:5*5=25

计算结果:y=2+3*2+3=11≠25。上述错误产生后较难跟踪,使用内联函数可以避免这种隐患。

[注意]控制结构不能放在内联函数中!2.5指

针1.指针的基本操作与指针有关的基本运算符有以下两个: (1)&变量名

&为取地址运算符,用来获取变量的首地址。 (2)*指针变量名

*为指向运算符,用来获取指针变量所指向变量的值。 &和*运算符都是单目运算符,其优先级高于所有双目运算符,采用从右到左的结合性(P33表2-4)。2.const修饰符与指针 const与指针在一起使用,情况比较复杂,可简单归纳为三种:指向常量的指针、常指针和指向常量的常指针。(1)指向常量的指针是一个指向常量的指针变量。例如:constchar*name="chen";

//声明一个名为name的指针变量name[3]=‘a’;

//错误,不容许改变已指向的常量name="zhang"; //正确,可以改变指针的指向(2)常指针把指针本身声明为常量。例如:char*constname="chen";//声明一个名为name的常指针name[3]='a'; //正确,所指的数据可以改变name="zhang"; //错误,不容许改变指针本身(3)指向常量的常指针指针本身与它所指向的数据值均不能改变,例如:constchar*constname="chen";//声明一个指向常量的常指针name[3]='a'; //错误,不能改变指针所指的值name="zhang"; //错误,不能改变指针的指向 C++提供了许多操作字符串数据的标准库函数,如比较字符串、搜索字符串中的字符、确定字符串长度等,只要我们在使用它们前在应用程序的开头添加包含“string.h”头文件的预处理命令#include<string.h>,在程序设计时就可直接引用。下表总结了这些函数。

2.6操作字符串数据的标准库函数C++字符串处理库(标准库)中常用的字符串操作函数2.7块内的说明在C++中,变量几乎可以在块(一对{}之间)任何地方加以说明,其有效范围从说明处起一直到块的末尾。但除for循环外,变量不能在其它控制语句中说明。下例是错误的: while(inti=0){…} 在嵌套的for语句中,内层要加{},例如:

for(inti=0;i<=10;i++){for(intj=0;j<=100;j++){…}} 否则在编译时出错。

一个大的软件,各个部分都应遵循同一风格。2.8new和delete运算符 new和delete运算符用来代替函数malloc()和free(),动态控制内存的分配和释放。delete一定要配对释放用new分配的内存,否则会导致内存泄漏、程序失控。 使用new的长处: 1.malloc()时函数,必须要用强制类型说明;而new是操作符,能自动返回正确的指针类型; 2.New操作自动计算分配类型的长度,不须sizeof操作符。2.9作用域访问运算符

:: 运算符::用于访问(即分辨)全局名字(变量、对象等),下例说明全局变量nData的访问方法://EX2_4.cpp 演示作用域访问符::#include<iostream.h>intnData; //全局变量voidmain(void){

intnData=1; //局部变量赋值

::nData=10; //全局变量赋值cout<<"localnData="<<nData<<endl;cout<<"globalnData="<<::nData<<endl;}2.10const的扩充作用 const在C++中可以用于定义一个常数变量。当一个变量定义为const时,表示其值在说明中被赋值,编译时已固定不变。例如: constintSIZE=100; charachName[SIZE]; const变量的作用范围与static变量相同。2.11函数重载 用相同的函数名定义不同的功用称为函数重载。重载的函数根据参数的个数和类型进行区分,但不能根据返回类型进行区分。例如://EX2_5.cpp:演示函数重载#include<iostream.h>voidfn(intn){cout<<"fn(int)calledwith"<<n<<endl;}voidfn(intnA,intnB){cout<<"fn(int,int)calledwith"<<nA<<"and"<<nB<<endl;}voidfn(charchA){cout<<"fn(char)calledwith"<<chA<<endl;}voidmain(void){inti=1,j=2;charc='a';fn(i); //callfn(int)fn(i,j); //callfn(int,int)fn(c); //callfn(char)}程序运行后屏幕显示:fn(int)calledwith1fn(int,int)calledwith1and2fn(char)calledwitha 函数重载是C++对C语言的重要扩展!使C++的强类型机制作用得到充分的施展。例如,利用C++的强类型机制,可以用一个函数名sqrt定义出求三个不同类型数据的平方根函数: intsqrt(inti); intsqrt(floatf); intsqrt(doubled); 如用C语言就要定义三个不同名字的函数,例如:isqrt(),fsqrt(),dsqrt()。调用时根据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论