配色: 字号:
C++教程
2012-08-06 | 阅:  转:  |  分享 
  
第一章C++语言的新面貌编者:刘振安授课教师:陈菲本章主要内容1.1似曾相识燕归来1.2使用函数重载1.
3C++的基本数据类型1.4旧貌换新颜1.5C++的几个新面貌1.6各章节关系和教学建议1.7程序的编辑、编译和
运行的基本概念机器语言与汇编语言由计算机硬件系统可以识别的二进制指令组成的语言称为机器语言。汇编语言将机器指令映射为一些可
以被人读懂的助记符,如ADD、SUB等。面向机器的语言:抽象层次太低,程序员需要考虑大量的机器细节高级语言高级语言屏蔽了机
器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的
具体事物。面向过程的语言是现实世界向机器世界的映射面向对象的语言出发点:更直接地描述客观世界中存在的事物(对象)以及它们
之间的关系。特点:是高级语言。将客观事物看作具有属性和行为的对象。通过抽象找出同一类对象的共同属性和行为,形成类。通过类
的继承与多态实现代码重用机器世界向现实世界的映射:它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造
系统,而不是围绕功能来构造系统。程序设计方法的发展历程——面向过程的程序设计方法程序的目的:用于数学计算
主要工作:设计求解问题的过程缺点:对于庞大、复杂的程序难以开发和维护优点:有效地将一个较复杂的程序系统设计任务分解成许多易于
控制和处理的子任务,便于开发和维护。缺点:可重用性差、数据安全性差、难以开发大型软件和图形界面的应用软件把数据和处理数据的过程
分离为相互独立的实体。当数据结构改变时,所有相关的处理过程都要进行相应的修改。每一种相对于老问题的新方法都要带来额外的开销。
图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。程序设计方法的发展历程
——面向对象的方法将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体——对象。对同类型对象抽
象出其共性,形成类。类通过一个简单的外部接口,与外界发生关系。对象与对象之间通过消息进行通讯。对象之间进行通信的结构叫做消息。
在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。面向对象的基本概念
——对象一般意义上的对象:是现实世界中一个实际存在的事物。可以是有形的(比如一辆汽车),也可以是无形的
(比如一项计划)。是构成世界的一个独立单位,具有:静态特征:可以用某种数据来描述动态特征:对象所表现的行为或具有的功能面向
对象的基本概念——对象面向对象方法中的对象:是系统中用来描述客观事物的一个实
体,它是用来构成系统的一个基本单位。对象由一组属性和一组行为构成。属性:用来描述对象静态特征的数据项。行为:用来描述对象动态特
征的操作序列。面向对象的基本概念——类分类——人类通常的思维方法
分类所依据的原则——抽象忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分
为一类,得出一个抽象的概念。例如,石头、树木、汽车、房屋等都是人们在长期的生产和生活实践中抽象出的概念。面向对象的基本概念
——类面向对象方法中的"类"具有相同属性和服务的一组对象的集合为属
于该类的全部对象提供了抽象的描述,包括属性和行为两个主要部分。类与对象的关系:犹如模具与铸件之间的关系,一个属于某类的对象称为
该类的一个实例。是一般到特殊,抽象到具体的关系。面向对象的基本概念
——封装把数据和实现操作的代码集中起来放在对象内部,外界通过对象提供的接口来使用它,不需知道内部数据结构细节和实现操作的算法。
实现封装的条件:(1)有一个清楚的边界(2)有确定的接口(用于接受用户发送的消息)(3)受保护的内部实现封装的好处
就是实现了信息隐藏,把对象的实现细节对外界隐藏起来了,提高安全性。面向对象的基本概念
——继承继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。定义:特殊类的对象拥
有其一般类的全部属性与服务,称作特殊类对一般类的继承。派生新类的同时也可以增加或重新定义数据和操作,这就产生了类的层次性。例如:
将轮船作为一个一般类,客轮便是一个特殊类。面向对象的基本概念——多
态性多态是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象
称为多态性。例如:数的加法->实数的加法->复数的加法C++的产生和特点C++的产生
C++是美国贝尔实验室于1980年开发出来的一种过程性与面向对象性结合的程序设计语言。最初他把这种新的语言叫做“含类的C
”,到1983年才取名为C++。C++的特点(1)C++保持与C兼容。(2)用C++编写的程序可
读性更好,代码结构更为合理,可直接地在程序中映射问题空间的结构。(3)生成代码的质量高,运行效率仅比汇编语言代码段慢1
0%到20%。(4)从开发时间、费用到形成的软件的可重用性、可扩充性、可维护性和可靠性等方面有了很大的提高,使得大中型
的程序开发项目变得容易的多。(5)支持面向对象的机制,可方便地构造出模拟现实问题的实体和操作。较C语言中的动态内
存分配(malloc)和释放(free)系统函数,new和delete有如下一些好处:new可以自动计算所需要分配内存的大小,
无需显示地给出new可以自动返回指针类型,无需强制类型转换用new动态创建一个类对象时,可以自动调用类的构造函数,对动态创建
的对象初始化数组不能作为整体输出,所以输出与复制均很麻烦。本节引入STL库提供的泛型算法,以便大大简化数组的操作。这些操作包括
输出数组的内容、对数组进行排序、反转数组的内容、复制数组的内容和检索等。对数组进行排序分为升幂和降幂,默认为升幂排序。输出数组的
内容、对数组进行升幂排序、反转数组的内容、复制数组的内容等操作,只需要包含头文件。对数组进行降幂排序和检索,
则需要包含。为了叙述简单方便,以熟悉的一维数组为例,并假设一维数组a和b的长度均为Len,数据类型为Ty
pe。二维数组的使用方法不能使用一维数组名表示二维数组的首地址。也就是说,对于二维数组a的首地址,不能使用a。一般有两种方法
,一种是直接使用它的地址&a[0][0],另一种是使用a[0]。对于各个元素项,则直接使用&a[i][j]的形式。只要地址表达正
确,就能正确编译。假设有a和b二个二维数组,则下面的表达方式是等效的: copy(a[0],a[0]+4,b[0]);//
原样拷贝到数组b copy(&a[0][0],&a[0][0]+4,&b[0][0]);//原样拷贝
//到数组b【例1.18】演示对二维数组进行
操作的例子。#include#include#includenal>usingnamespacestd;voidmain(){ doublea[2][2]={1.1,4.4,
3.3,2.2},b[2][2]; reverse(a[0],a[0]+4);//数组元素逆向 copy(a
[0],a[0]+4,ostream_iterator(
cout,""));//输出逆向后的数组内容 cout<//原样拷贝到数组b sort(a[0],a[0]+4);//默认升幂排序 copy(a
[0],a[0]+4,ostream_iterator
(cout,""));//输出排序结果 cout<iterator(cout,""));/
/输出数组b的内容 cout<//
到数组b copy(b[0],b[0]+4,ostream_iterator
(cout,""));//输出逆向后的数组b的内容 cout<+2);//数组元素第1行反向 copy(a[0],a[0]+2,ostream_iterator
(cout,""));//输出数组元素第1行逆向后的内容 cout<reverse(a[0]+2,a[0]+4);//数组元素第2行反向 copy(a[0]+2,a[0]+4,o
stream_iterator(cout,""));//输出数组元素第2行逆向后的内容
cout<());//降幂排序 copy
(a[0],a[0]+4,ostream_iterator
(cout,"")); cout< cout<<(find(a[0],a[0]+4,4.3)==4.3)<<""
//不存在输出0 <<(find(a[0],a[0]+4,3.3)==3.3)<l;//存在输出1}程序输出结果如下:2.23.34.41.11.12.23
.34.42.23.34.41.14.43.32.21.12.21.14.43.34.43
.32.21.101字符串数组可同样处理,只是它本身可以整体输出。【例1.19】演示对字符数组进行操作的例子。#
include#include#includeusi
ngnamespacestd;voidmain(){ chara[]="wearehere!",b[11]; r
everse(a,a+10);//数组元素逆向 copy(a,a+10,ostream_iteratorar>(cout));//输出逆向
后的数组内容 cout<sort(a,a+10);//默认升幂排序 cout<序结果 cout<//逆向拷贝到数组b cout<//数组b部分逆向 copy(b+2,b+8,ostream_iterator(cout))
;//输出数组b逆向后的部分内容 cout<dl; sort(a,a+10,greater());//降幂排序 cout<//输出排序后的数组a cout<<(find(a,a+10,''e'')==''e'')<<"" <<(fi
nd(a,a+10,''O'')==''O'')<注意,不能将这个结束符逆向拷贝,否则字符串的第一位变成结束标志,使其成为空字符串。1.5.4数据的简单输入输出格式C++的
cout和cin流能自动识别数据类型,根据数据类型进行读写操作,完全不需要用户设置,使用非常方便。不过,有时对输入输出仍有一定的要
求,尤其是输出格式。C++提供了两种格式控制方式,一种是使用iso_base类提供的接口,另一种是使用一种称为操控符的特殊函数,
特点是可直接包含在输出和输入表达式中,因此更为方便。使用它们时,一是要正确包含它们二是只有与符号“<<”或“>>”连接时才
起作用三是无参数的操控符函数不能带有“()”号。不带形式参数的操控符定义在头文件中,带形式参数的操控符定
义在头文件中。resetiosflags和setiosflags的参数flag是引用C++的类ios_bas
e里定义的枚举常量,所以要使用限定符“::”。表1.5是几个常用常量的含义。flag可由多个常量组成,例如:setiosfla
gs(ios_base::showpoint|ios_base::fixed)【例1.20】使用setw设置输出宽度的例子。
#include#includeusingnamespacestd;void
main(){inta=29,b=1001;cout<ut<在a和b之间加入了2个空格。setw(6)只对紧接着的那个元素有效。【例1.21】在下面的程序中,当要求输入时,均输入1
00,给出程序的输出结果。#include#includeusingnamesp
acestd;constdoublePI=3.141592;voidmain(){co
ut<)<<out<<"Dec:"<<<"Oct:"<<<"Inputb=";cin>>b;cout<etiosflags(ios_base::showpos)<tb="; cin>>b; cout<ase::showpos); cout<3.143.141592Dec:100Hex:64Oct:144144144Inputb=100144+100
Inputb=100+100100setprecision(intn)是设定显示小数位数(小数点也占1位),1代表显示
整数数字,2才显示小数点后面的一位数。0等于不设,由系统决定。系统只输出5位小数,为了将它全部输出,必须设置7位。由此可写出前
5行输出。程序执行cout<cout<ios_base::showpos)<号。这个设置保持到使用语句cout<置标志为止。如单独使用语句resetiosflags(ios_base::showpos);则不起作用。
【例1.22】分析下面程序的输出。#include#includeusingna
mespacestd;voidmain(){cout<tw(0)<<15<endl<ndl;cout<iosflags(ios_base::right)<(5)<<2<ase::right);cout<etw(5)<<1<}域宽n比显示位数少时,则不起作用,即不影响显示。使用填充字符时,n比显示位数大1时,才发生填充作用。如程序所示,要显示15
个“”号,必须取n=16。setfill后面使用“""”才能全部填充为设定字符“”,否则将全部填充为空格。程序中使用15个
“”填充,就是用这种方法实现的。清除设置标志之后,才能进行新的设置。程序的输出如下:1515151515
123123用关键字const
修饰的标识符是一类特殊的常量,称为符号常量(有名常量),或称之为const变量(常量变量)。对基本数据类型的变量,一旦加上con
st修饰符,编译器就将其视为一个常量,不为它分配存储空间,并且每当在程序中遇到它时,都用在说明时所给出的初始值取代它。
常量定义也可以使用构造函数的初始化方法,即constintk(2);//定义常量并使用构造函数方法初始化
为了强调常量的不变性,仍然沿用“=”号进行初始化。预处理语句预处理程序分析处理是在编译程序的其他部分
之前进行的。为了与一般的C++程序语句相区别,所有预处理语句都以位于行首的符号“#”开始。预处理语句有3种,它们分别
是宏定义、文件包含和条件编译#if…#endif。例如语句#definePI3.14159
是用名字PI来代替数字3.14159,又例如:#defineYES1#define
NO0定义YES和NO分别是1和0。当然,在这些场合下,最好是使用const语句。【例1.1】中的语句1是
文件包含语句,它指的是一个程序把另一个指定文件的内容包含进来。书写时,可以使用引号也可以用尖括号。例如:#inc
lude"filename"或者#include都是在程序中把文件filen
ame的内容包含进来。注意,文件名是用双引号还是尖括号括起来,其含义并不一样。使用尖括号时,C++编译系统将首先在C++语言系
统设定的目录中寻找包含文件,如果没有找到,就到指定的目录中去寻找,这是引用系统提供的包含文件所采用的方法。自己定义的包含文件一般
都放在自己指定的目录中,所以在引用它们时,就采用双引号以通知C++编译器在用户当前目录下或指定目录下寻找包含文件。如
自己定义的包含文件myfile.h在E盘的prog目录中,则引用形式为#include"e:\prog\myfile.h"8.
变量对象命名及其初始化C++语言是大小写字母敏感的语言,例如name和Name就代表不同的标识符。一般可以遵循如下简单规
律:①使用能代表数据类型的前缀。②名称尽量接近变量的作用。③如果名称由多个英文单词组成,每个单词的第1个字母大写。④
由于库函数通常使用下划线开头的名字,因此不要将这类名字用作变量名。⑤局部变量使用比较短的名字,尤其是循环控制变量(又称循环位
标)的名字。⑥外部变量使用比较长且贴近所代表变量的含义。简单变量对象可以在定义时明确地加上初始值,方法是在定义变量对象的后面
加上赋值运算符“=”和一个数学表达式,如:intx=1,y=25;charsquote=''\''''
;longday=6024;9.程序的书写格式在书写程序语句时,一般应注意如下规则:①括
号紧跟在函数名的后面,但在for和while后面,应用一个空格与左括号隔开以增加可读性。②数学运算符的左右各留一个空格
,以与表达式区别。③在表示参数时,逗号后面留一个空格。④在for、do…while和while语句中,合理使用缩进
、一对花括号和空行。1.2使用函数重载C++允许为同一个函数定义几个版本,从而使一个函数名具有多种功能,这称为函数重载。
假设有一个函数max,分别具有如下函数原型:doublemax(double,double);//2个实型参数的
//函数原型intmax(int,int);
//2个整型参数的函数原型intmax(int,int,int);//3个整型参数的函数原型只要分别
为不同参数的max编制相应的函数体,就可以实现各自的功能。【例1.2】函数重载产生多态性的例子。#includeeam>usingnamespacestd;doublemax(double,double);//2个实型参数的函数
原型intmax(int,int);//2个整型参数的函数原型intmax(int,int,int
);//3个整型参数的函数原型voidmain(){ cout<<""<doublemax(doublem1,doublem2){return(m1>m2)?m1:m2;}intmax
(intm1,intm2){return(m1>m2)?m1:m2;}intmax(intm1,intm2,
intm3){intt=max(m1,m2);returnmax(t,m3);}C++能够正确
调用相应函数,程序输出结果如下:17.5456max(5,9,4)=9从函数原型可见,它们的
区别一是参数类型不同,二是参数个数不同。1.5C++的几个新特点C++语言引入一些区别于C语言的新特点,这些也
是设计类的基础知识。1.5.1动态分配内存C++的运算符new用于从内存的堆区动态分配内存,其返回值是在堆中分配的内
存单元的地址。通常可将这个地址赋给一个指针变量,然后通过该指针变量访问分配的内存。指针变量=new数据类型名[大小]如:
intp_int;p_int=newint[9];由new分配的内存都应由delete来释放,以免发生内存泄漏
。delete指针变量这里释放的是指针变量所指向的内存,而不是指针变量本身所占用的内存【例1.11】演示使用new和del
ete的例子。#includeusingnamespacestd;voidmain(){
doublep;//声明double型指针p=newdouble[3];
//分配3个double型长度的地址for(inti=0;i<3;i++)cin>>(p+i);
//将输入数据存入指定地址for(i=0;i<3;i++) cout<<(p+
i)<<"";//将地址里的内容输出deletep;}如果在一行输入:12.112.212.3则
输出:12.112.212.3C++为结构动态分配内存:给Point结构指针分配内存,则p=ne
wPoint;当不再使用这个空间时,用“deletep;”即可。1.5.2引用例:x=56,如果给对象x再起一个名字
a,a与x的地址一样,则x和a同步变化。也就是说,给整数对象x起个“别名”。声明方式为:数据类型&别名=对象名;引用
在定义时就必须初始化。初始化后,引用不得再指向其它变量作为其它变量的别名。引用定义的格式为:<类型>
&<引用名>=<变量名>;如:int&r_x=a;//ok;r_x被初始化
int&r_y;//error;r_y没有被初始化【例1.12】
演示引用的例子。#includeusingnamespacestd;voidmain(){
intx=56;int&a=x;//定义a是x的引用,a和x的地址一样int&r=a;//定义r是a的
引用,r和a的地址一样(即和x的地址一样)cout<<"x="<=“<<&a<<",r="<则a和x也同步变化cout<<"x="<<<&a<<",r="<,所以同步变化。程序输出如下:x=56,&x=0012FF7C,a=56,&a=0012FF7C,r=56,&r=0012FF7
Cx=25,&x=0012FF7C,a=25,&a=0012FF7C,r=25,&r=0012FF7C由此可见,所谓“引用”就
是将一个新标识符和一块已经存在的存储区域相关联。因此,使用引用时没有分配新的存储区域,它本身并不是新的数据类型。可以通过被引用的
对象来修改引用。不能有空引用。在程序中必须要确保引用是和一块正确的存储区域关联。①引用实际上就是变量的别名,使用引用就如同直接
使用变量一样。引用有其与变量不同的特点不能直接声明对数组的引用,也不能声明引用的引用。语句int&&
r=x;//对x引用的引用,所以是错误的。可以声明对指针的引用(如p2是指针,则int&p1=p2;是可以的),
但不能声明指针对x的引用,即“int&p=&x;”是错误的。可以声明指向引用的指针“intp=&a②引用的作用与
指针有相似之处,它会对内存地址上存在的变量进行修改,但它不占用新的地址,从而节省开销。虽然不能直接定义对数组的引
用,但可以间接地建立对数组的引用。这通过typedef来实现。例如,typedefintarray[
10];该语句定义了一个int型的数组类型array,然后就可以用它来定义数组的引用,例如,arraya
; array&b=a;这样,就定义了一个a数组的引用b,就等于给数组a取了一个别名b,所以对b的一切
操作就是对数组a的操作。【例1.13】间接引用数组的例子。#includeusingnamespace
std;typedefdoublearray[10];voidmain(){arraya={12,34,5
6,78,90,98,76,85,64,43};array&b=a;a[2]=100;
//操作数组afor(inti=0;i<10;i++)//数组b同步变化
cout<函数名只能返回一个值,当需要从被调用函数中带回多个值时,可以通过引用给函数传递多个参数,然后在被调函数中赋给正确的值,即可实现带回
多个值的要求。【例1.14】从一个函数中求出数组中元素最大值和最小值及其下标,并将这些数据带回调用函数。#includestream>usingnamespacestd;voidmax_min(intb[10],int&,int&,i
nt&,int&);voidmain(){intmax,min,mk,nk;inta[10]={8
8,45,78,97,67,89,92,36,125,73};max_min(a,max,min,mk,nk);
cout<endl;}voidmax_min(intb[10],int&m,int&n,int&mk,int&nk)
{m=n=b[0];//初始化最大值和最小值mk=nk=0;//初始化最大值和最小值所在数组
//的元素下标for(intj=1;j<10;j++)if(b[j]>m)
{m=b[j];mk=j;}elseif(b[j]125为最大值,下标为836为最小值,下标为71.5.3泛型算法应用于普通数组什么是STL????全称为??Stand
ard?Template?Library??,即标准模板库????基本概念:????????容器:可以把它理解为存放数据的地方
,常用的一些容器有?链表(list)?栈(stack)?动态数组?(vector)?双端队列(deque)?队列(queue)?映
射(map)????????游标(iterator):可以把它理解为指针类型,STL中的许多函数需要用到它们作为参数?????
???算法:它们通常需要与容器和游标配合使用,使用它们,你可以方便地对容器中的数据进行各种常见的操作,如排序操作,寻找最大元素的操
作等STL使用抽象化的行为定义且实现它们,来达到算法的重复使用。1.数组内容反转reverse(a,a+Len);
//数组元素反向2.复制数组的内容copy(a,a+Len,b);//将数组a的内容原样复制到数组
breverse_copy(a,a+Len,b);//将数组a的内容以逆向
//方式复制到数组b3.数组升幂排序sort(a,a+Len);
//默认升幂排序4.输出数组的内容copy(a,a+Len,ostream_iterator(co
ut,"字符串"));它将数组内容按正向方式送往屏幕,输出方式是将每个元素与“字符串”的内容组合在一起连续输出。如果使用空
格或者换行符,可以按格式输出。例如://每个输出元素后面增加一个空格copy(a,a+Len,ostream_iterato
r(cout,""));//在输出每个元素之后,换新行copy(a,a+Len,ostream_iterato
r(cout,"\n"));//将数组内容按逆向方式送往屏幕,输出方式是将每个元素与“字符串”的内容组合在一起
连续输出。reverse_copy(a,a+Len,ostream_iterator(cout,"字符串"));
//如果使用空格或者换行符,可以按格式输出。例如:reverse_copy(a,a+Len,ostream_
iterator(cout,""));//增加空格reverse_copy(a,a+Len,o
stream_iterator(cout,"\n"));//换新行5.数组降幂排序sort(b,b
+Len,greater());//数组降幂排序数组降幂排序需要包含头文件。6
.查找数组内容find(a,a+Len,value);//查找数组a内是否存在值为
//value的元素使用find函数需要包含头文件。这个函数返回
的是位置指针,虽然可以使用运算符“”输出查找的内容,但更一般的方法是使用判别语句。例如:Typex=find(a,a+L
en,value);//x的数据类型为Typeif(x==a+Len) cout<<"没有value";else
cout<<"有值为value的数组元素";【例1.15】演示数组升幂排序、复制、逆转和输出等操作的例子#includ
e#include//头文件usingnamespacestd;
voidmain(){ doublea[]={1.1,4.4,3.3,2.2},b[4];//正向输
出数组a,以空格隔开 copy(a,a+4,ostream_iterator(cout,"")); cout
<(
cout,""));//逆向输出数组a,以空格隔开 cout<opy(a,a+4,b);//原样复制到数组bcopy(b,b+4,ostrea
m_iterator(cout,“”));//正向
//输出数组b,以空格隔开 cout<排序 copy(a,a+4,ostream_iterator(cout,“”));
//输出数组
a cout<b,b+4,ostream_iterator(cout,“”));
//输出数组b cout<ndl;}程序输出结果如下:1.14.43.32.22.23.34.41.11.14.43.3
2.21.12.23.34.44.43.32.21.1【例1.16】演示数组降幂排序、查找和输出等操作的例子。
#include#include#includeus
ingnamespacestd;voidmain(){ doublea[]={1.1,4.4,3.3,2.2};
sort(a,a+4);//升幂排序 copy(a,a+4,ostream_iterato
r(cout,"")); cout<ouble>());//降幂排序 copy(a,a+4,ostream_iterator(cout,"
")); cout<f(x==a+4) cout<<"没有值为4.4的数组元素";else cout<<"有值为"<数组元素";cout<if(x==a+4) cout<<"没有值为8的数组元素";else cout<<"有值为"<数组元素";}程序输出结果如下:1.12.23.34.44.43.32.21.1有值为4.4的数组元素没有
值为8的数组元素?可以将数组a的某个连续区间的元素复制到数组b的指定区间(只要b有足够的长度即可);可以输出
部分区间的内容等。【例1.17】演示对一维数组进行局部操作的例子。#include#include<
algorithm>#includeusingnamespacestd;voidmain()
{ doublea[]={1.1,4.4,3.3,2.2},b[8]={8}; copy(a+2,a+4,ostream
_iterator(cout,""));//输出a[2]和a[3] cout<reverse_copy(a+1,a+4,ostream_iterator
(cout,""));//输出a[3]~a[1] cout<;//将数组复制到数组b[4]处copy(b,b+8,ostream_iterator
(cout,""));//输出数组b cout<//对部分数组元素升幂排序 copy(a,a+4,ostream_iterator(
cout,""));//输出数组a cout<greater());//对部分数组
//元素降幂排序 copy(b,b+8,ostream_iterato
r(cout,"")
);//输出数组b cout<出a[2]和a[3]2.23.34.4//输出a[3]~a[1]80001.14.43
.32.2//数组a的内容为b[4]~b[7]1.13.34.42.2//只对2,3两个排序
84.41.10003.32.2//只对前6个排序面向对象程序设计C++语言计算机语言的发
展1.1似曾相识燕归来本节给出一个使用结构和函数的典型的C++程序,既复习C语言的知识,又引入C++语言的新特征,并为学习
设计类打下基础。【例1.1】演示使用结构的示例程序。/功能:将结构的两个域值相加,然后乘以2/#include
//包含头文件usingnamespacestd;
//使用命名空间intresult(int,int);//result函数的原
型声明constintk=2;//定义常量structPoint
//定义结构point{intx,y;
//定义结构成员x和y};intmain()
//主程序{intz(0),b(50);
//初始化整数对象Pointa;//定义结构对象
acout<<“输入两个整数(以空格区分):”;//输出提示信息cin>>a.x>>a.y;
//接受输入数值z=(a.x+a.y)k;/
/计算结果z=result(z,b);//计算结果cout<<“计
算结果如下:”<信息<<")"<")-"<
献花(0)
+1
(本文系小云蔡首藏)