610 likes | 810 Views
C++ 面向对象程序设计. 东华大学理学院 葛勇. 第一章 计算机和 C++ 编程入门. C++ 的起源与历史 参考资料 C++ 常用的编译器 学习要点 最简单的 C++ 程序 示范程序讲解 学会使用 MinGW 来编译、运行程序. C++ 的起源与历史.
E N D
C++面向对象程序设计 东华大学理学院 葛勇
第一章 计算机和C++编程入门 • C++的起源与历史 • 参考资料 • C++常用的编译器 • 学习要点 • 最简单的C++程序 • 示范程序讲解 • 学会使用MinGW来编译、运行程序
C++的起源与历史 • Stroustrup工作起于1979年的C with Classes。这个构思起源于 Stroustrup 做博士论文时的一些程序撰写经验。他发现Simula具备很利于大型软件开发的特点,但Simula的执行速度太慢,无法对现实需求发挥功效;BCPL虽快得多,但它过于低阶的特性,使其不适于大型软件的开发。当Stroustrup开始在贝尔实验室工作时,他有分析UNIX核心关于分布式计算的问题。回想起他的博士论文经验,Stroustrup开始为C语言增强一些类似Simula的特点。之所以选择C,是因为它适于各种用途、快速和可移植性。除了C和Simula之外,同时也从其它语言中取得灵感,如ALGOL 68、Ada、CLU以及ML。刚开始时,类别、衍生类别、储存类型检查、内联和预设参数特性,都是透过Cfront引入C语言之中。1985年10月出现了第一个商业化发布。
C++的起源与历史 • 1983年,C with Classes改命名为C++。加入了新的特性,其中包括虚函数、 函数名和运算符重载、参考、常数、使用者可控制的自由空间储存区控制、改良的类型检查,以及新的双斜线(//)单行批注风格。1985年,发布第一版《C ++程序设计语言》,提供一个重点的语言参考,至此还不是官方标准。1989年,发布了Release 2.0。引入了多重继承、抽象类别、静态成员函式、常数成员函数,以及成员保护。1990年,出版了The Annotated C++ Reference Manual。这本书后来成为标准化的基础。稍后还引入了模板、异常处理、命名空间、新的强制转型,以及布尔类型。
C++的起源与历史 • 随着C++语言的演变,也逐渐演化出相应的标准链接库。最先加进C++标准函式库的是串流I/O链接库,其用以取代传统的C函式,如printf和scanf。随后所引入的链接库中最重要的便是标准模板库,简称STL。 • 多年后,一个联合的ANSI-ISO委员会于1998年对C++标准化(ISO/IEC 14882:1998)。在官方释出1998标准的若干年后,委员会处理缺陷报告,并于2003年发布一个C++标准的修正版本。2005年,一份名为Library Technical Report 1(简称TR1)的技术报告释出。虽然还不是官方标准的一部分,不过它所提供的几个扩展可望成为下一版C++标准的一部分。几乎所有目前仍在维护的C++编译器皆已支持TR1。 • 虽然C++免专利,但标准文件本身并不是免费的。
参考资料 • 《C语言程序设计》谭浩强,清华大学出版社 • 《C++程序设计》谭浩强,清华大学出版社 • 《C++程序设计语言》(特别版)The C++ Programming Language, Special Edition Bjarne Stroustrup,机械工业出版社
C++常用的编译器 • Turbo C++ • Boland C++ • C++ Builder • Visual C++ 6.0(国内使用较多的,但不符合C++标准的地方比较多,^_^因为它的发布比C++标准发布的要早) • Visual C++.net 2003,2005等(推荐使用) • MinGW Developer Studio 2.05(推荐使用)
学习要点与重点 • 1.1-1.2为自学内容,考试不作要求 • 主要学习1.3节的内容,掌握最简单的C++程序的编写、学习使用相应的编译器来编译、运行简单的程序
最简单的C++程序 int main() { }
预编译处理 主函数(固定格式)每一个 C++程序必须有的函数 输出语句 C++变量的声明 示范程序讲解 #include <iostream> using namespace std; int main() { int NumPods, PeasPerPod, TotalPeas; cout<<“请输入豆荚数量,输入完毕后回车.\n“;
输入语句 乘法运算后,将结果赋值 示范程序讲解 cin>> NumPods; cout<<“请输入每个豆荚上的豆子数量:\n"; cin>> PeasPerPod; TotalPeas = NumPods * PeasPerPod; cout<<“您有"; cout<< NumPods; cout<<“颗豆荚\n";
换行符 每一条语句后需跟; 与之前的{之间的称为语句块 示范程序讲解 cout<<“且每颗豆荚上有"; cout<< PeasPerPod; cout<<“颗豆子,那么总的豆子数为:\n"; cout<< TotalPeas; cout<<endl; }
练习 • 完成书上P21(7版P22)上的练习16-21 • 编写程序在屏幕上输出如下图形 * ***** ** *
调试、运行程序 1.新建一个工程 在MinGW中点击菜单Project->New Project或按快捷键Ctrl+N,出现如下New对话框
2.在Location一栏中输入要保存工程文件的路径,或点击 选择路径。(注意,MinGW对中文的支持不是很好,请尽量使用英文的路径),在Project Name一栏中输入工程名称。然后点击OK钮。 3.点击菜单File->New Files,出现如下New对话框。
4.在上述对话框中的File Name一栏中输入文件名,注意在左边选中”C/C++ Source File”图标,并勾选”Add to project”,然后点击OK钮.
5.现在你可以输入你的程序了。 6.输入完程序后,点击菜单Build->Compile(或Ctrl+F7)进行编译,检查错误,编译无误后,点击Build->Execute Program(Ctrl+F5)运行程序。将出现类似如下窗口
作业 完成书上P.25(7版P27)第5、7、8 作业注意事项: • 编程项目作业需按时上交,作为平时成绩; • 作业与布置后的下一个周三上交。 本周三上任务: • 学习如何使用Visual Studio.net(2003或2005版)软件; • 完成编程项目作业。
第二章 C++基础知识 • 变量和赋值 • C++标识符的命名规则 • 数据类型和表达式 • int类型与double类型 • char类型 • bool类型 • string类型 • 类型的兼容性与转换
声明变量 #include<iostream> using namespace std; int main() { int number_of_bars; double one_weight, total_weight;//每块糖的重量和总的重量 …… }
C++标识符(变量的名称)的规则 • 标识符的名称必须以字母或_开头,后面的字符也只能是字母、数字或_。 • C++的标识符是区分大小写的。 • C++标识符的长度没有限制,但有的编译器会忽略超过其最大允许长度的所有字符。 • C++标识符请使用英文,不要使用中文。 • 有一类特殊的标识符,称为关键字或保留字,它们在C++中有预先定义的含义,不能用作变量或其他元素。见附录1
问题 问题1 下面的标识符哪些是合法的,哪些是非法的? x %A _a2bc 3bc RATE+3 data!yab class Class Private 问题2 Rate RATE rate在C++中是同一个变量吗?
变量的声明 • 此外,变量的声明必须要指明变量的类型,在C++中最基本和最常用的变量类型有int,double, char, bool等
变量赋值与初始化 • 赋值 如前面的示范程序中 TotalPeas = NumPods * PeasPerPod; 注意: • 变量在赋值时需注意类型的匹配,如果不匹配,则可能导致语法错误,或进行类型的转换。 • 变量在多次赋值后,前面的值会被后面赋值行为覆盖。
变量赋值与初始化 如: //设NumPods * PeasPerPod的结果为10 TotalPeas = NumPods * PeasPerPod; TotalPeas =15; cout<< TotalPeas; 的结果是? 15
变量的初始化 • 变量在声明的时候可以进行赋值,称为初始化。如: int minimum_number=3; double rate=0.07, time, balance=0.0; double rate(0.07), time, balance(0.0); 注意: • 变量在初始化时,有两种方式,如上所示。 • 变量在初始化时,可以只对部分变量初始化。
未初始化的变量(undefined variable) • 设计Min没有进行初始化,则如下语句 number=Min+10; 则可能会导致非常严重的后果。 提示:尽量使用有意义的名称 如:x=y*z; 则不如 distance=speed*time; 更容易理解。
练习 • 完成P.34(7版P.36)的自测题
输入和输出 • 使用cout进行输出 • include预编译指令和命名空间 • 转义序列 • 格式化带小数点的数字 • 用cin进行输入 • 练习
使用cout进行输出 cout可将变量值和文本字符串输出到屏幕。变量和字符串可组合输出,如: cout<<BarNum<<“颗糖果\n"; cout的多个<<可分行,如上面的语句可如下书写 cout<< BarNum <<"颗糖果\n"; 但要注意一个cout只能有一个;号,<<之间不能有空格
也可以使用多个cout来输出,如: cout<< BarNum; cout<<"颗糖果\n";
转义序列 常用的转义序列有: \n 换行符 \t 水平制表符 \v 竖直制表符 \a 响铃符 \\ 反斜杠 \" 双引号 \b 退格符(将之前输出到屏幕的字符擦去一个)
换行符 这些转义符中的\n可用endl来代替,如: cout<<"You have definitely won\n"; 和 cout<<"You have definitely won"<<endl; 作用是一样的,但要注意endl要使用<<号来输出
格式化带小数点的数字 设double类型的变量price=78.5,那么语句 cout<<“价格为: $"<<price<<endl; 输出的结果是78.5,但如果希望是78.50等,那么如何控制小数点后的位数呢? 如果我们希望小数点后输出2位,则可以 cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); cout<<"The price is $"<<price<<endl;
用cin进行输入 cin的使用与cout的使用非常类似,如: cin>> BarNum >>one_weight; 可在一条语句中列举多个变量,也可写为: cin>> BarNum >>one_weight; 但只能有一个分号,当程序运行到cin语句时,它会等待用户从键盘输入,它将第一个变量设为从键盘输入的第一个值,第二个变量设为从键盘输入的第二个值,依此类推。但是除非用
用cin进行输入 户按Enter键,否则程序不会读取输入。用户也可以按Esc键来纠正输入错误。 注意输入的各个数字必须以一个或多个空格或者以一个换行符来分隔。计算机会忽略任意数量的空格或换行符,径值找到下一个输入值。因此,无论你用一个空格还是用多个空格,甚至用一个换行符来分隔,都是无关紧要的。
练习 • 书上P.41(7版P.44)的10、11
数据类型和表达式 • int类型和double类型
int类型与double类型 • 2与2.0的区别 • 整数与浮点数 • 浮点数的科学记数法如3.67e4就是367004.9e-3是0.0049 • 其他数字类型,如:long, float, long double • char类型 • bool类型 • string类型简介
char类型 char类型变量的声明格式如下 char ch,letter; char类型的变量只可容纳键盘上的任何一个字符,如: ch='a'; letter='+'; ch='\n' 等都是合法的,但 letter="A"; letter='ab'; 等是不合法的,前者因为双引号界定的是字符串
char类型 后者是因为单引号内的字符超过一个而不合法。
char类型示例 #include<iostream> using namespace std; int main() { char s1,s2,s3; cout<<"Enter two initials, without any periods:\n"; cin>>s1>>s2;
char类型示例 cout<<"The two initials are:\n"; cout<<s1<<s2<<endl; cout<<"Once more with a space:\n"; s3=' '; cout<<s1<<s3<<s2<<endl; cout<<"That's all."; }
bool类型 bool类型的声明与初始化可如下进行 bool IsLetter=true, IsNumeric=false; bool类型的变量只接受true或false,该类型主要用于分支和循环执行语句,即if-else语句和while, do…while以及for循环中 整形值如果给bool类型变量赋值则需要进行隐式转换,如: bool IsBig=2, Small=0;
string类型简介 string类是用来处理字符串的一个类,使用该类之前,需要在预编译中加入 #include<string> 并使用命名空间std using namespace std; string类型变量的声明与基本的数据类型如int、 double类型的声明一样,如: string str="我是一名学生";
string类的头文件 string类型变量声明 string类示例 #include<iostream> #include<string> using namespace std; int main() { string FirstName,LastName; cout<<"请输入您的姓名(包括姓和名):\n";
两个字符串拼接 string类示例 cin>>FirstName>>LastName; cout<<"您的姓为:"<<FirstName<<endl; cout<<"您的名为:"<<LastName<<endl; string Name=FirstName+LastName; cout<<"您的姓名为:"<<Name<<endl; }