c++的初步知识课件_第1页
c++的初步知识课件_第2页
c++的初步知识课件_第3页
c++的初步知识课件_第4页
c++的初步知识课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

Object-Oriented

Programming

inC++

第一章C++的初步知识第一章C++的初步知识第二章类和对象第三章再论类和对象第四章运算符重载第五章继承与派生第六章多态性与虚函数第七章输入输出流第八章C++工具参考教材选用教材

《C++面向对象程序设计》谭浩强参考教材《C++语言基础教程》吕凤翥编著参考教材《C++程序设计教程》钱能主编

英文教材《ProgramminginC++》(SE)高等教育出版社1.1

C++程序结构的特点

一个示范程序

程序的组成部分

程序的书写格式一个C++的示范程序/*ThisisasimpleCppprogram*/#include<iostream.h>//文件包含voidmain()

//主函数头

{//主函数体

doublex,y;//变量说明

cout<<"Entertwofloatnumber:";//输出数据

cin>>x>>y;//输入数据

doublez=x+y;//定义并赋值

cout<<"x+y="<<z<<endl;//输出数据}任何变量都必须先说明后使用执行结果为:

Entertwofloatnumber:34<enter>x+y=7C语言中,用#define定义常量:

#definePI3.14159 #defineRa+b

它只是在预编译时进行字符置换,将标识符置换成表达式或数字。预编译后,标识符PI,R不再存在。PI,R不是变量,没有类型,不占用存储单元,很容易出错:

inta=1;b=2; #definePI3.14159 #defineRa+b cout<<PI*R*R;

输出的不是3.14159*(a+b)*(a+b),而是3.14159*a+b*a+b。 程序因此出错。1.2用const定义常变量1.3函数原型申明C++强制规定,如果函数调用的位置在函数定义之前,则在调用函数之前必须实现作函数原型申明。这一点与C不同,C只是建议,而没有强制函数申明的一般形式为: 函数类型函数名(参数表);最后的分号可不能忘了,否则出错!参数表中可以只指定各个参数的类型,而不指定参数名!函数申明和定义的示例//求圆面积,将函数申明和定义分开,在调用函数前先申明它#include<iostream>floatarea(float);//先申明voidmain(){floatradius;cout<<“Pleaseinputradius:“;cin>>radius;if(radius>0)cout<<area(radius)<<endl;

//再使用}floatarea(floatr)//最后定义{returnr*r*3.14159;}程序可以改为如下形式:#include<iostream>floatarea(floatr){returnr*r*3.14159;}//先申明main(){floatradius;cout<<“Pleaseinputradius:“;cin>>radius;if(radius>0)cout<<area(radius)<<endl;

//再使用}而C++的做法是重载:将这三个函数名取相同的名字,程序运行时,系统会根据实际参数的不同,调用相近参数的函数:#include<iostream>intmax(inta,intb,intc){if(b>a)a=b;if(c>a)a=c;returna;}floatmax(floata,floatb){if(b>a)a=b;returna;}longmax(longa,longb,longc){if(b>a)a=b;if(c>a)a=c;returna;}voidmain(){inta,b,c,d;floatx,y,z;longm,n,p,q;cin>>a>>b>>c;cin>>x>>y;cin>>m>>n>>p;d=max(a,b,c);cout<<“int_d=“<<d<<endl;z=max(x,y);cout<<“float_z=“<<z<<endl;q=max(m,n,p);cout<<“long_q=“<<q<<endl;}Main函数三次调用max函数,每次实参的个数或类型不同,系统会寻找与之匹配的函数调用。1.5函数模板什么时候使用模板?重载函数的不便之处在于,对于同名的函数要一个一个地编写,编码量很大。对于有些相同功能的函数,如果函数个数相同,可以用另外的方法来解决,这就是模板(Template)。函数模板的定义形式:

Template<类型参数表>

返回类型函数模板名(数据参数表) {函数模板定义体 }示例:将上述重载示例改为函数模板。#include<iostream>usingnamespacestd;//默认使用std标准库名

template<typenameT>;Tmax(Ta,Tb,Tc)//建立函数模板时,只需要{if(b>a)a=b;//将函数类型、参数类型int换成T就行。if(c>a)a=c;//即用虚拟的类型名T代替实际的类型returna;}voidmain(){inti=8,j=3,k=4,h;longm=1,n=2,p=3,q;h=max(i,j,k);q=max(m,n,p);cout<<“int_h=“<<h<<endl;cout<<“long_q=“<<q<<endl;}类型参数可以有多个:template<typenameT1,typenameT2>1.6有默认参数的函数背景:一般情况下,函数调用时,形参从实参那里取得值。因此要求实参的个数和类型应该与形参相同。但是,有时候,多次调用同一函数时用的是同一实参数,或者调用时还不好确定实参数。C++提供一个简单的解决办法,即给参数一默认值。这样当不提供实参数时,形参就用默认参数作为参数值。示例:有一函数声明为:

floatarea(floatr=6.5); 调用area函数时,如果不提供实际参数给r,r就以默认数值6.5作为参数顶用area: area();//相当于area(6.5);注意: 1)当有多个参数时,如果只有部分参数有默认值,则指定了默认值的参数必须放在参数表的最右边,否则出错。因为实参与形参的结合是从左至右顺序进行的,第一个实参必须给第一个形参,第二个实参必须给第二个形参…。1.6有默认参数的函数声明: voidarea(floatx1,intx2=1,charx3=‘a’);调用:area(1.2,3,‘b’);//形参值全部由实参得到

area(1.2,3);//最后一个参数取自默认值

area(1.2);//最后两个参数取自默认值area();//出错,第一个形参没有实参,也没有默认值2)一个函数不能既作为重载函数,又作为默认参数函数。因为当调用函数时如果少写一实际个参数,系统无法判断是利用重载函数还是利用默认参数函数。1.7变量的引用(reference)什么叫引用?变量的引用就是变量的别名。建立引用的作用,是为一个变量另取一个名字,以便在需要的时候间接地引用该别名。如何使用引用?假如有一个变量a,想给它另取一个别名b,可以这样写: inta;

int&b=a;//声明b是一个整形变量的引用变量,并且被初始化为a此处&不代表取地址,,只是“引用声明符”。对一个变量声明一个引用,并不另外开辟内存空间。b和a代表同一个变量单元。引用不是独立的变量,编译系统不给它分配存储单元。因此建立引用只有声明,没有定义,只是声明和某一个变量的关系。示例:

#include<iostream> usingnamespacestd; voidmain() {inta=10; int&b=a; a=a*a; cout<<“b=“<<b<<endl; }运行结果:b=1001.7变量的引用(reference)将引用作为函数参数:C++之所以增加“引用”,主要是利用它作为函数参数,以弥补函数传递参数的不方便的遗憾。也降低了编程难度。将变量名作为实参:这时传给形参的是变量的值,传递是单向的,函数运行时,形参发生变化,并不回传给实参。因为形参和实参不是同一个存储单元。请看下面示例:1.7变量的引用(reference)#include<iostream>voidswap(inta,intb){inttemp;temp=a;a=b;b=temp;}voidmain(){inti=3,j=5;swap(i,j);cout<<i<<“,”<<j<<endl;}运行结果,i,j仍然是3,5。没有发生交换。传递变量的指针:这时传给形参的是变量的地址,形参得到一个变量的地址,即形参指针变量指向实参变量单元。函数中形参发生改变,实际上是改变实参。这种方法实际上仍然是值传递:想指针变量传递地址值。然后通过指针变量访问有关变量。“间接地”回传了改变的变量。请看下面示例:1.7变量的引用(reference)#include<iostream>voidswap(int*p1,int*p2){inttemp;temp=*p1;*p1=*p2;*p2=temp;}voidmain(){inti=3,j=5;swap(&i,&j);cout<<i<<“,”<<j<<endl;}运行结果,i,j是5,3。变量值发生交换。如何理解引用?我们从物理实现上来理解,引用是一个隐性指针,即引用值是引自所指向的实体。这就是引用的真意。高级编程(面向应用)多用引用,低级编程(面向机器)多用指针。对引用的说明:不能建立void类型的引用。因为任何实际存在的变量都属于非void类型。void&a=9;//错误不能对数组名进行引用,因为数组名是首地址本身不占有存储空间。

charc[6]=“hello”; char&r=c;//错误可以建立指针变量的引用:

inti=5; int*p=&i;//定义指针变量p,指向i

int*&t=p;//t是指向整形变量的指针变量的引用,初始化为p.1.7变量的引用(reference)可以将引用的地址赋给指针。此时,指针指向原来变量:

inta=3; int&b=a; int*p=&b;//指针p指向变量a的引用b,相当与指向a不能定义指向引用类型的指针变量:

int&*p=&a;//错误可以用常量或表达式对引用初始化,但必须用const限定:

constint&c=3;//合法1.7变量的引用(reference)内联函数还有限制:函数内不能含有循环结构或switch结构;不能含有任何静态数据及数组声明。不能是递归函数。1.8内联函数(inlinefunction)标识符只能在说明它或定义它的范围内是可见的,而在该范围之外是不可见的。大多数标识符的说明与定义是一致的,只有少数例外。如:函数等。范围有大有小。最大为整个程序,最小为块,中间有文件和函数。每一个变量都有自己的有效范围。我们只能在变量的作用域内使用该变量。不能直接使用其它作用域中的变量。如果要使用其它作用域中的同名变量,必须使用“作用域运算符”,即“::”。1.9作用域运算符

请看示例:

#include<iostream.h> floata=1.5; voidmain() {inta=5; cout<<a<<endl;//输出作用域为main函数的局部变量a的值 cout<<::a<<endl;//输出作用域为全局的全局变量a的值 }运行结果:51.5注意:不能用作用域运算符“::”访问函数中的局部变量。1.9作用域运算符局部变量和全局变量1、局部变量是指作用域在函数级和块级的变量。2、全局变量是指作用域在程序级和文件级的变量。#include<iostream.h>inti(5);

//外部全局变量externvoidfunc(){cout<<i<<endl;}voidmain(){

inti=3;//内部局部变量func();cout<<i<<endl;}局部变量全局变量蓝色为文件作用域绿色为函数作用域1.10字符串变量

C++除了可以使用C语言提供的字符型变量和字符型数组外,还提供了字符串类。这种类可以定义字符串对象。但在文件开头必须包含string库:#include<string.h>字符串定义:

strings1;//定义字符串变量s1 strings2=“China”;//定义字符串变量s2并初始化字符串赋值:可以对定义了的字符串变量进行赋值:

s1=“Hello”; s2=s1; s3=s1+s2;//字符串连接字符串变量的输入输出:

stringc1; cin>>c1; cout<<c1;字符串比较:可以使用==,!=,>=,<=来进行字符串的比较1.10字符串变量字符串数组:也可以直接定义字符串数组:

stringname[4]={“张三”,”李四”,”王五”,”刘六”};

运行结果为:

name[0]=“张三“;

name[1]=“李四”; name[2]=“王五”; name[3]=“刘六”;1.10字符串变量示例:从键盘输入3个字符串,并按字典顺序输出:#include<iostream>#include<string>usingnamespacestd;voidmain(){strings1,s2,s3,temp;cin>>s1>>s2>>s3;if(s2>s3){temp=s2;s2=s3;s3=temp;}if(s1>s2){temp=s1;s1=s2;s2

温馨提示

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

评论

0/150

提交评论