C++语法基础.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2章C++语法基础•VC6.0是一个集成开发环境,C++是一门高级编程语言,两方面的学习是相互相成、缺一不可的。而学好VC6.0的前提是学好C++语法理论,万丈高楼平地起,在没有扎实的C++基础而仓促地用MFC或Win32SDK进行软件开发或学习,最终也需要返工重新学习。C++语言理论主要分为四块:传统C语言语法部分、基于对象部分、面向对象部分和STL(StandardTemplateLibrary,标准模板库)部分。•本章涉及的知识点有:•数据类型的定义:读者将学会使用各种数据类型的定义和使用,有C基础的读者将学会从传统的面向过程数据定义观念转变为对象创建的面向对象数据类型观念。•循环语句和表达式:读者将学会使用各种循环语句来处理问题。•函数的定义和使用:将学会定义和使用各种函数。•类的定义和使用:将学会类的定义和对象的创建,并学会重载运算符的理论和编写。•类的继承:将学会面向对象的继承理论和实际编写方法。•STL:读者将熟悉常用的几种STL的使用和原理。2.1C++简介•美国AT&T贝尔实验室的BjarneStroustrup博士在20世纪80年代初期发明并实现了C++,最初C++被称作“CwithClasses”,即带类的C。C++语言是作为C语言的增强版出现的,刚开始只是在C的基础上增加类,然后不断地增加新的特性。虚函数(virtualfunction)、运算符重载(operatoroverloading)、多重继承(multipleinheritance)、模板(template)、异常(exception)、RTTI、名字空间(namespace)等逐渐被加入C++标准。1998年国际标准组织(ISO)颁布了C++程序设计语言的国际标准ISO/IEC14882-1998。C++是具有国际标准的编程语言,通常称作ANSI/ISOC++。从1998年C++标准委员会成立,大概每5年视实际需要更新一次语言标准,下一次标准更新将是在2009年。遗憾的是,由于C++语言过于复杂,以及他经历了长年的演变,直到现在(2004年)只有少数几个编译器完全符合这个标准,准确地说,百分之百符合ANSI/ISOC++标准的编译器是不存在的。2.2数据类型定义和使用•本小节主要介绍C++数据类型的定义和使用,包括基本数据类型、数组、指针和结构体等。2.2.1简单变量•为了把信息存储在计算机中,并随时可以,程序必须记录以下3个基本属性:•信息存放的地方。•要存储的值。•信息的类型。•例如,定义一个整型变量,可以通过以下语句进行定义:•intMyBalls;//定义一个整型变量•MyBalls=5;//给该整型变量赋值为5•这两行语句告诉程序,程序存储了一个信息类型为整型的变量,其值是5,并且存储在代号为MyBalls的变量中。但在这两行语句中,并不能体现这个值为“5”的整型存储的内存地址,事实上,程序是将这一切都安排好了的。使用“&MyBalls”即可查看MyBalls所在的内存地址。2.2.2算术运算符•读者可能对学校里的数学学科中的各种运算符号记忆犹新,在计算机中也同样有各种算术运算符。•如果在程序中有如下的语句:•intapples=2+7;•很显然,“2”和“7”是操作数,如果细化,可以称“2”为左操作数,“7”为右操作数,“+”符号是一个算术运算符,“2+7”是一个运算表达式,其值为“9”。•C++提供的算术运算符有5种:•“+”:加运算符。•“-”:减运算符。•“*”:乘运算符。•“/”:除运算符。•“%”:取模运算符。2.2.3枚举、指针和数组•C++除了提供一些基本的数据类型外,还提供了其他额外的数据类型:枚举、指针和数组类型,以及将在往后的小节讲解的结构体和类类型,这些统称为复合数据类型,即是由其他数据类型组合或以基本数据类型为基础衍生出来的类型。•1.枚举类型•2.指针类型•3.数组类型2.2.4string类和C风格字符串•顾名思义字符串就是由字符组成的串,在前文中讲解了数组的使用,那么字符串也是可以使用数组来表示的:•charname[10];•这里就声明了可以由10个字符组成的字符串,用这个字符串来表示一个名字,使用字符数组来标记字符串称为“C风格字符串”。但是使用字符数组来表示字符串有很多不方便的地方:•修改困难。如name的初始化和赋值都要通过逐个字符赋值操作。•长度限制。如name的长度最多就是10,而且最后一个元素还要用于“\0”字符数组结束标记。•粒度太小,不直观。如果使用字符数组来定义name,则程序员将花更多的时间和精力来处理字符粒度级别的操作,而分散了一些软件高层次的其他问题的注意力,如算法、抽象数据类型或软件架构等。2.2.5结构体类型•结构体是C++程序设计语言中重要的复合类型,假设要存储一个学生的信息,当然不能像前文所说的仅仅存储这个学生的数学成绩。•假设希望编写一个程序,可以存储这个学生的以下信息:•姓名•所在班级•学号•家庭住址•语文成绩•数学成绩•英语成绩2.2.6类类型•类的定义和结构体有点类似,详细会在面向对象相关章节介绍,这里简单讲解类定义的形式,假设前文所提到的学生信息要用到类来实现,即把一个具体的学生(人)看成一个对象,而把学生(这类人)看成一个类,那么可以定义为以下的形式:•1classstudentClass•2{•3private:•4stringstrName;•5stringstrClass;•6intnumber;•7stringhomeAddress;•8intchinese;•9intmath;•10intenglish;•11public:•12function1();•13function2();•14.....//其他成员函数定义•15};2.2.7实例2.1-成绩管理系统(1.0版)•现在考虑开发一个简单的成绩管理系统,用于管理记录高三(7)班的5位同学的个人信息和学习成绩等,要求使用本小节及前文所学的知识实现简单的数据录入、输出和统计等功能:•(1)可以输入全部同学的姓名、语文、数学和英语成绩。•(2)输出全部同学的姓名、语文、数学和英语成绩。•(3)统计全班同学的语文、数学和英语平均成绩。添加的空的源文件2.3运算符、表达式和语句•本小节将讲解几种常用的运算符,并在此基础上介绍循环语句和逻辑判断语句,最后利用本小节的知识对“成绩管理系统(1.0版)”进行升级,将其升级到“成绩管理系统(2.0版)”。2.3.1几种常用的运算符•本文在前文介绍了5种算术运算符,它们是:加、减、乘、除和取模。本小节着重介绍其他几种常用的运算符。•1.“”和“”运算符•2.“++”和“--”运算符•“++”和“--”运算符实质上是将某个对象或指针进行累加1或累减1的操作。2.3.2循环语句:for语句、while语句和do...while语句•计算机的特点是运算速度快,而且非常适合处理大量重复性的操作。因此在任何一门程序设计语言中,循环语句都是不可或缺的。•1.for语句•for语句的基本格式如下:•for(起始条件;终止条件;累加)•{•//循环体•}•2.while语句•while语句的基本格式如下:•while(条件表达式)•{•//循环体•}•3.do...while语句•do...while语句的基本格式如下:•do•{•//循环体•}while(条件表达式)2.3.3判断语句:if语句和switch语句•在实际的工作流处理中,经常会遇到这样的情况:如果出现A情况,则执行甲事情;如果不出现A情况,则执行乙事情。而处理这样的工作流选择的情况,绝大多数高级语言多提供了if语句进行处理。•if语句的语法格式如下所示:•1if(条件表达式)•2{•3//执行体1•4}•5else•6{•7//执行体2•8}2.3.4实例2.2-成绩管理系统(2.0版)•在前文根据要求开发了“成绩管理系统(1.0版)”,在本节中,增加了新的知识,那么就可以升级成绩管理系统了,考虑将其升级的功能如下:•以比较少的代码量可以输入50位同学的姓名、语文、数学和英语成绩。•以比较少的代码量可以输出50位同学的姓名、语文、数学和英语成绩。•以比较少的代码量可以计算50位同学的语文、数学和英语平均成绩。•“成绩管理系统(1.0版)”中的代码非常繁琐,这个可能是读者遇到的最明显的问题,现在简要开发的“成绩管理系统(2.0版)”将使用循环语句解决这个问题,而这样的方式可以明显地增加处理学生信息的数目。2.4函数定义和调用•本小节主要介绍函数的定义和调用,涉及内容有函数的常规使用方法、递归调用、函数重载和函数模板等。2.4.1定义函数和函数原型•到目前为止,本书其实已经多次使用了函数,这个就是C++程序的主函数main()。main()具有C/C++函数的一般特性,函数的定义形式如下:•returnTypefunciontName(参数列表)•{•函数体;•returnreturnTypeObject;•}•returnType是函数的返回类型,该类型可以为void,也可以是基本数据类型,也可以是某结构体或类类型。2.4.2函数通过指针来调用数组•C++将数组名视为指针,即将数组名解释为其第一个元素的地址:•apples=&apples[0];•但也有例外的情况,就是:使用sizeof来获取整个数组长度,这时就不能将数组名看作是数组的第一个元素的地址了。•函数使用数组参数一般调用方法如下:•function(arrayName,arrayNum);2.4.3函数指针•函数在内存中运行时,肯定也要像数据对象一样,占用一定的内存空间,既然占用了内存空间,那么它也就有一个内存地址,而指向这个内存地址的就是“函数指针”。函数指针对程序而言,是一个非常重要的概念。使用函数指针可以编写一种函数,这种函数调用了另外一个或若干个函数的指针,即定义调用函数参数的函数。2.4.4具有引用参数的函数•变量或对象的引用实质上是变量或对象名的一个“别名”,即一个变量实体有两个名字。如某人姓名为“王孝峰”,熟知他的人都叫他的小名“王小二”,那么对这些熟知他的人来说,别人如果提到“王孝峰”就知道是指代他,如果提到“王小二”还是会自然想到是指代他。变量的引用的定义如下:•intrate=30;•int&ptRate=rate;•变量的引用具有终身忠诚的特性,它在定义时初始化成某变量实体的别名,一直到变量销毁,如果让其他变量赋值给该应用,只会改变该引用(即该变量实体)的数值,而不会改变该引用别名所指代的对象。如:•intrate=30;•int&ptRate=rate;//ptRate初始化为rate的引用•intapples=50;•ptRate=apples;//ptRate被赋值为50,即rate被赋值为50;2.4.5函数重载•面向对象的编程,就是将自然界的物体或工作流中的处理对象看成对象。C++具有多态性,函数重载就是多态性的其中一种表现形式。所谓的函数重载就是一个函数名有多个不同版本的函数体。这样的好处在于给用户或用户程序提供一个稳定不变的接口,而接口里面的内容根据用户程序提供的参数来确定。•如前文的swap()函数,由于参数类型是int型的,因此只能处理int型的数据交换,可能有读者尝试使用2.4.4小节的swap()来处理double类型的交换,发现仍然能编译通过,那是因为编译器将double自动转换成了int类型了,实质上也只是能处理int类型的交换。如该函数不能通过处理string类型的交换,因为string类型不能自动转换成为int类型。2.4.6函数模板的定义和使用•细心的读者可能就会发现,这三个函数代码相同的地方非常多,而仅仅有两个地方不相同:•参数的类型声明。•临时变量的类型。•因为临时变量是用来存放交换参数的,所以这三个函数代码本质上就只有一个不同点:处理的数据的类型不同。•为了避免大量编写重复代码,C++提供了函数模板的功能,使用函数模板可以创建出不同版本的重载函数,而代码编写只需要

1 / 52
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功