linuxc编程基础工具在发展后期有时编译系统根据实际工作需要_第1页
linuxc编程基础工具在发展后期有时编译系统根据实际工作需要_第2页
linuxc编程基础工具在发展后期有时编译系统根据实际工作需要_第3页
linuxc编程基础工具在发展后期有时编译系统根据实际工作需要_第4页
linuxc编程基础工具在发展后期有时编译系统根据实际工作需要_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1997年ANSIC++ 将它们纳入了ANSIC++标准,建议3n n程序中常见的错误有两大类:语法错误和运行错误。在编译n在设计程序时,应当事先分析程序运行时可能出现的各种意4 nLogic Unusualbut 5 6n该对象被传递到负责意外处理的地方n异常对象包含有意外发生的详细信息7 n异常的表现都在较 8 9n任何时候,程序在执行中遇到了 A*p=newA(if(p==NULL)throw"Outof}void{

try}catch(OutOfMemory)…}catch(FileNotFound)…}catch(…){…}

处理除零异常9-intDiv(intx,intvoid

{cout<<"5/2="<<Div(5,2)<<endl;}{cout<<"exceptofdevidingzero.\n";}cout<<"thatisok.\n";exceptofdevidingexceptofdevidingzero.thatisok.{

if(y==0)throwy;returnx/y; throw表达式 {被检查的语句 {进行异常处理的语句 ) catch(…) ) n usingnamespace class Avoidfun1(voidA::fun1({classvoidfun1();voidB::fun1({

B n在文件中可以定义全局变量(globalvariable),它的作用域是整个程序。 int intn在分别对文件A和文件B进行编译时不会有问题。但是,如果一个程序n可以通过extern同一程序中的两个文件中的同名变量是同一个变量。如果在文件B中有以下: externint n 为了解决上面这个问题,ANSIC++增加了命名空间(namespace)。所 {int double 变量(可以带有初始化 函数(可以是定义 类 namespace {constintRATE=0.08;// double doubletax( {return

namespace {int 如果想输出命名空间ns1中成员的数据,可以采用下面的方法 n在命名空间成员时,要用命名空间名和作用域分辨符对命名空间成员进行限定,以区别不同名空间中的同名标识符。即 n这种方法是有效的,能保证所的实体有惟一的名字。但是如果命名空间名字比较长,尤其在有命名空间嵌套的情况下,为一个实体,需要写很长的名字。在一个程序中可能要多次命名空间成员,就会 可以为命名空间起一个别名(namespacealias),用来代替较长 命名空间,名 namespaceTV 名空间成员名必须是由命名空间限定的名字。例 using Studentstud1(101,″Wang″,18);//此处的Student相当于 但是要注意:在同一作用域中用using using usingns2::Student;

其后出现的Student是命名空间ns1 其后出现的Student是命名空间ns2 Student //请问此处的Student是哪个命名空间中的 能否在程序中用一个语句就能一 一个命名空间中的全部成员呢 C++提供了usingnamespace语句来实现这一目的。usingnamespace语句的 usingnamespace命名空间名 usingnamespace Studentstud1(101,″Wang″,18);//Student隐含指命名空间ns1中的 //这里的fun函数是命名空间ns1中的fun 但是如果同时用usingnamespace usingnamespace语句。 namespace// {void // n 法 员n。在文(也无)中有以下语: 则执行无名命名空间中的成员fun函数,输出″OK.″ 标准头文件(如iostream)中函数、类、对象和类模板是在命名空间std 这样,在程序中用到C++标准库时,需要使用std 如std::cout<<″OK.″<<endl; cout是在命名空间std中定义的流对 在大多数的C++程序中常用usingnamespace语句对命名空间std进行 usingnamespace 人员喜欢用若干个“using命名空间成员” namespace命名空间” usingstd::cout; usingstd::cin; nnC语言程序中各种功能基本上都是由函数来实现的,在C语承了这份宝贵的。在C++程序中可以使用C语言的函数n如果要用函数库中的函数,就必须在程序文件中包含有关的头文件,在不同的头文件中,包含了不同的函数的。 #include nC++标准要求系统提供的头文件不包括后缀.h,例如iostream、string。 #include<cstdio>#include<cmath>usingnamespacestd; #include<stdio.h>#include<math.h>#include

#include<cstdio>#include<cmath>#include<cstring>usingnamespacestd; nC++ //函数 intmax(intx,int{return(x>y)?x:y //函数floatmax(floatx,floaty){return(x>y)?x:y;} //函数doublemax(doublex,double{return(c>y)?x:y n 现在,我们再重新审视上述的max()函数,它们都具有同样的功能,即求两个数的最大值,能否只写一套代码解决这个问题呢?上述问题C++引入模板机制,n模板定义:模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重 n te<class形参名,class形参名 te和class是关键字,class可以用typename关键字代替,在这里typename和class没区别,<>括号中的参数叫模板形参,模板形参和函数形参例9-3#include<iostream.h> te<typenameT>Tmy_max(Ta,Tb){returna>b?a:b;voidmain(

intmy_max(inta,intb{returna>b?a:b;charmy_max(chara,charb{returna>b?a:b;doublemy_max(doublea,doubleb{returna>b?a:b;{cout<<"my_max(3,5)is"<<my_max(3,5)<<endl;cout<<"mymax('y','e')is"<<mymax('y','e')<<endl;cout<<"my_max(9.3,0.5)is"<<my_max(9.3,0.5)<<endl}n te<class形参名,class {...

classn类模板和函数模板都是以temte开始后接模板形参列表组成,模板形参不能为空,一但了类模板就可以用类模板的形参名类中的成形参名来。n te<class classA{public:Ta;Tb;Tfun(Tc,Tn在类A中 n比如一个模板类A,则使用类模板创建对象的方法为A<intn在类A后面跟上一个<>尖括号并在里面填上相应的类型,这样的话类A中凡是用到模板形参的地方都会被int所代替。 n当类模板有两个模板形参时创建对象的方法为A<intdoublem;类型ntem n比 n te<classT1,classT2voidA<T1,T2>::fun te<typenameT>classArray{publicArray(ints);virtual~Array();virtualconstT&Get(intindex)const;virtualvoidPut(intindex,constT&value);protected:intsizeT*element} {if(s>1)size=s; elsesize=1;element=newT[size];}n te<typenameT>Array<T>::~Array(){delete[]element; te<typenameTconstT&Array<T>::Get(intindex){returnelement[index]; te<typenameTvoidArray<T>::Put(intindex,constT&{element[index]=value;nvoid{Array<int>IntAry(5);inti;for(i=0;i<5;i++)IntAry.Put(i,i);cout<<"IntegerArray:\n";for(i=0;i<5;i++)cout<<IntAry.Get(i)<<'\t';cout<<endl;Array<double>DouAry(5)for(i=0;i<

温馨提示

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

评论

0/150

提交评论