(欢迎baj队长携夫人莅临指导,)WindyWinter感谢诸位前来捧场。 WindyWinter

Slides:



Advertisements
Similar presentations
Tool Command Language --11级ACM班 金天行.
Advertisements

6.4 字符串与指针 1. 用字符数组存放一个字符串.
第14章 c++中的代码重用.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
C++程序设计 王希 图书馆三楼办公室.
在PHP和MYSQL中实现完美的中文显示
Using C++ The Weird Way Something about c++11 & OOP tricks
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
資料大樓 --談指標與陣列 綠園.
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第二讲 搭建Java Web开发环境 主讲人:孙娜
Object-Oriented Programming in C++ 第一章 C++的初步知识
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
走进编程 程序的顺序结构(二).
辅导课程六.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
第一章 C++编程简介 丘志杰 电子科技大学 计算机学院 软件学院.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
C++程序设计 string(字符串类) vector(容器类).
第二章 Java语言基础.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
泛型委托 泛型接口、方法和委托.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第七章 操作符重载 胡昊 南京大学计算机系软件所.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
三:基于Eclipse的集成开发环境搭建与使用
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
Web安全基础教程
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
3.16 枚举算法及其程序实现 ——数组的作用.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 Java基本语法 讲师:复凡.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
Python 环境搭建 基于Anaconda和VSCode.
本节内容 指针类型的使用 视频提供:昆山爱达人信息技术有限公司.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
變數與資料型態  綠園.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
学习目标 1、什么是列类型 2、列类型之数值类型.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
百万行、千万行数据查询教程 老黄牛.
Presentation transcript:

走向C++之路 WindyWinter windy@briefdream.com (欢迎baj队长携夫人莅临指导,)WindyWinter感谢诸位前来捧场。 WindyWinter windy@briefdream.com #include <stdio.h> main(t ,_,a) char*a;{return t<1?main(*a,a[-t],"=a-1kj3gnm:q\ ebh_cf*<r.d>i^+?,()[?qzyrjuvcdefg\ h,!kbpolwxs'.t main(")&&a[-t]&&main (t-1,_,a):t/2?_==*a?putchar(32[a]) :_%115<36||main(t,_,a+1):main( 0,t,"+b:s?#mw{ty}t(x1{|~?\ y<#q?(*#{k)}rsh?vts){\ ?w*#yk<y,}w}z!w)v\ ~>u:!zym^t|x|\ |xtutu!uz\ |#}t") ;}

课程适用性 迫于时间所限,本课程只能面向C语言程序设计基础较好的同学, 并且希望经过短期训练,让你能读懂、写出合格的C++程序, 至少不再认为今后将面对的RoboCup 2D球队底层是天书, 虽然这底层里也有大量的无厘头代码。 以及改善面对超过一个文件的工程即手足无措的状况。 注意:本课程不会建立面向对象和泛型编程的思维模式,因此不能替代《面向对象程序设计》。 建议比较勤快的同学脱离本课程,用《C++ Primer》自学C++语言。 C++是C的超集。C99标准有550页,C++03标准有786页。即使你完全记得550页的C99标准说了什么,也还有200多页需要钻研,何况你我都清楚,能记得250页的就已经非常了得了。所以,培训的目标仅仅限定于编写联赛用的球队可能会使用到的C++的特性,而其他的地方,则能省就省。 《C++ Primer》适合入门,《Thinking in C++》适合对C非常熟悉的同学,《The C++ Programming Language》则适合已经对另外一门语言(面向对象的)非常熟悉的同学。

为你的程序贴上C++的标签 从这里开始 C++是C的超集,也就是说,大部分C程序都可以不经改变的直接被C++编译器编译通过(除非C程序中用到了C++的保留标识符)。但贴上C++的标签有助于(装B?忽悠?)。

一个著名的C程序 #include <stdio.h> void main() { int i; for (i=0; i<10; ++i) printf(“Hello World!\n”); } 为了给出一个直观的印象,我们先看一看C++程序跟C程序的相貌差别。虽然说程序不可貌相(比如右下角这一个),如果C++给您的第一印象很差,我们也不强求,但我们仍然认定坚持是一种可贵的品质。 #include <stdio.h> main(t ,_,a) char*a;{return t<1?main(*a,a[-t],"=a-1kj3gnm:q\ ebh_cf*<r.d>i^+?,()[?qzyrjuvcdefg\ h,!kbpolwxs'.t main(")&&a[-t]&&main (t-1,_,a):t/2?_==*a?putchar(32[a]) :_%115<36||main(t,_,a+1):main( 0,t,"+b:s?#mw{ty}t(x1{|~?\ y<#q?(*#{k)}rsh?vts){\ ?w*#yk<y,}w}z!w)v\ ~>u:!zym^t|x|\ |xtutu!uz\ |#}t") ;}

贴上C++的标签 #include <iostream> using namespace std; int main() { for (int i(0); i<10; ++i) cout<<“Hello World!”<<endl; } return 0; 可以看出,C++特有的标签还是不少的,首先是标准库头文件没有了.h后缀,后面又有一个using namespace std的写法,main函数被强制规定为int类型,for循环首部可以新定义变量,初始化也有了新的写法,至于printf,则干脆变成了cout。这些改变我们将在后面一一讲明。

C++与C的相貌差别 C的写法 C++写法 Glance #include<stdlib.h> _Bool scanf(“%d%d”,&a,&b); printf(“%d%d”,c,d); int *p = malloc(sizeof(int)); free(p); char str[]=“WindyWinter is talented.”; int a[10]; char b[20]; double c[30]; #include<cstdlib> bool int a,b; cin>>a>>b; cout<<c<<d; int *p = new int; delete p; string str(“WindyWinter is talented.”); vector<int> a; vector<char> b; vector<double> c; 所有C的标准库头文件都可以如此改换名称,在C++中使用(需要using namespace std);而且只有标准库头文件才可以如此改换名称,一般的头文件是不需要换的,即便你将头文件命名成xxx.ppt也没人管你。 _Bool类型是C99标准新规定的逻辑类型,它在C++里面变成了bool。 cin和cout是C++新定义的流输入输出方式,它们的用法是用“<<”或“>>”(提取,插入)像串糖葫芦一样把变量串起来,被串起来的变量将按顺序被读入或输出,流输入输出方式将在最后做进一步的解释。 new和delete是C++引入的运算符,作用与C中的malloc和free相仿,不过到底是有区别的。 C中的字符串在C++中有了特性更完备的替代品string,C中的字符串在C++中被称作“C风格字符串”,仍然在发挥作用,不过很多时候是在与string配合使用。 vector将是我们与C++中一个重要概念——容器的第一次约会,vector可以看作长度可变的数组,很多时候代替了C数组。

即时声明和初始化方法 C语言要求所有变量的声明必须在实意语句之前,也就是在所有{}的外面,或者是每对{}的最前面。 This is the beginning. C语言要求所有变量的声明必须在实意语句之前,也就是在所有{}的外面,或者是每对{}的最前面。 C++没有了这样的限制,变量只要遵循先声明后使用的原则就可以了,不再要求必须放在什么地方。这就是为什么我们可以在for语句头部塞上一个int i(0)。 “int i(0)”里的(0)是指将i初始化为0,作用相当于int i=0。 但()的初始化方法不限于此: string a(“WindyWinter is talented.”); string b(a); string c = a; ()与=是否永远等价呢?对于内置类型是等价的,但对于类类型,一般是不等价的。 在所有{}外面的叫全局变量。 内置类型有bool, int, double等。不等价性涉及到类的构造函数和拷贝构造函数,当讲完构造函数之后,我想大家就能完全明白()是什么意思了,但拷贝构造函数将被略过。

引用 引用(reference)是C++新定义的一种复合类型,其本意可以理解为变量的“别名(alternate name)”。 It’s something new. 引用(reference)是C++新定义的一种复合类型,其本意可以理解为变量的“别名(alternate name)”。 声明/定义一个引用: int a; int & r = a; r被定义为a的引用后,r和a可以被认为是同一个变量。 引用的主要用在函数形参中(作用与指针相仿): 避免传递规模巨大的实参; 将形参的值返回。 在C语言中我们已经见过一种很常用的复合类型——指针。 注意,这里虽然有一个“=”,但却不是赋值运算符,而是“定义”。除非是函数形参列表中,否则引用的声明和定义必须在一起。 (作用与指针相仿)——形参与实参将共享同一个内存单元。 下面这个函数可以把a,b的值交换(注意这个函数写的不好,只是为了省地方才这么写)。 void swap(int & a, int & b) { a^=b^=a^=b; }

引用 指针 引用 The difference between reference and pointer 是一个变量(当然也可以加上const成为常量); 存在“空指针”; 取地址运算符,解引用运算符。 应用应当被看作一个“符号”,与const指针类似; 不存在“空引用”; 用法与正常变量一样。

左值与右值 左值 右值 Left or right, that is the question. 赋值运算符左边必须是左值; 变量皆是左值; 变量的引用是左值; string str是左值; ++i是左值; int *a = new int[10]; a是左值; 函数、表达式可以返回左值——以引用的形式。 赋值运算符右边既可以是左值,又可以是右值; 常量皆是右值; 常量的引用是右值; “WindyWinter is talented.”是右值; i++是右值; int a[10]; a是右值; 函数、表达式可以返回右值——以值的形式。 既然谈到了const和引用,就不得不提一个在C++中被强化的概念——左值和右值。 左值既可以出现在赋值运算符的左边,也可以出现在右边;而右值只可以出现在右边。 严格来说,左右两个a并不是同一个类型,左边是“指向整型的指针”,右边是“指向大小为10的整型数组的指针”。

函数 inline函数。 形参允许有默认值,即函数可以声明为如下形式: void func(int a, int b=0, int c=1); 如果在调用时没有给出b,c的值,则b=0,c=1,即调用时可以不写有默认值的参数——func(1), func(1,2), func(1,2,3)均是合法的。 允许不同的函数有相同的函数名(被称为函数重载)。 “不同的函数”是指形参的类型、数目或返回值的类型不同的函数,比如: int min(int a, int b); double min(double a, double b); int min(int a, int b, int c); double min(double a, double b, double c); 两两不同。 inline函数在C99标准里已有详细规定,C++的inline函数与此基本相同。 类型不同或数目不同均可,但若只有返回值类型不同则不行。

类型转换 C++继承了原有的C语言的隐式类型转换; We can change! – Change what? C++继承了原有的C语言的隐式类型转换; 所有的类型都可以隐式转换为该类型的引用: int => int &, int * => int * &, string => string &; 所有的类型都可以隐式转换为该类型的常量; C风格字符串可以隐式转换为const string; 强制类型转换在C++中有了另一类写法: (type) a  xxx_cast<T> a; static_cast<T>实现与C中类型转换相同的功能; const_cast<T>去掉表达式的常量性; 另外还有reinterpret_cast和dynamic_cast 除了void指针向其他类型指针的转换。 C语言中一个带括号的类型名称后面跟一个表达式,表示将表达式的结果强制转换为指定的类型。 C++中对应的写法为xxx_cast<类型名>表达式。 注意const_cast应该慎用,后两种cast将不再涉及。

Tags Cloud Keywords 课程适用性 C++气息 cstdlib namespace int main() bool cin cout new delete string vector 即时声明 初始化方法() 引用 左值和右值 inline 函数重载 形参默认值 类型转换 强制类型转换 www.google.com www.cplusplus.com/reference 我们休息一下,这是第一段的tag。今天讲的内容是非常简略的,建议大家以此为关键词,搜索相关资料。下面的两个网站是搜索的常用地点——第一个相信大家都认得,第二个可以当作C++的reference。 Have a break.

快速搭建C++开发环境 工欲善其事,必先利其器 我们将要搭建的开发环境是基于Linux的。

GNU/Linux Linux已经在获得越来越多的认可; Linux对开发人员非常友好; 明日之星 Linux已经在获得越来越多的认可; Linux对开发人员非常友好; Linux获得了RoboCup 2D开发团队的信赖; RoboCup 2D Server运行在Linux系统上; RoboCup比赛时一般使用Linux系统。 Ubuntu是一个以桌面应用为主的Linux发行版,其名称意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,相当于中华固有的“仁爱”思想; Ubuntu是第一个以“易用性”为最高价值的Linux发行版; 蓝鹰2D组大多数成员在使用Ubuntu。 RoboCup2009使用Ubuntu8.04作为比赛平台。 Linux这个词本身只表示Linux内核,但在实际上人们已经习惯了用Linux来形容整个基于Linux内核、并且使用GNU 工程各种工具和数据库的操作系统(也被称为GNU/Linux)。基于这些组件的Linux软件被称为Linux发行版。

Ubuntu安装 安装需要Ubuntu安装光盘和至少5G的空闲空间; Installation 一般安装 GNU/Linux 都需要在硬盘上分割出至少一个分区。Wubi 可以在 Windows 上建立一个几 GB 的映像文件并把 Ubuntu 安装在映像文件中。Wubi安装的Ubuntu在速度上和一般的硬盘安装差不多,只是在硬盘存取方面会稍慢。启动电脑时,Windows 会提示选启动 Windows 还是 Ubuntu。当不想要 Ubuntu 时,您可以像卸载Windows程序一样随时在Windows中删除 Ubuntu。 用虚拟光驱加载Ubuntu安装光盘的ISO也可以。放入光盘后,Wubi会自动运行。 选择installation inside windows。 选择Ubuntu以继续安装。 此时最好拔掉网线,否则会卡在89%

安装之后 It’s not over. 新安装的Ubuntu可能有诸多不尽人意之处;请参照Ubuntu 9.04 速配指南: http://wiki.ubuntu.org.cn/index.php?title=Qref/Jaunty Ubuntu中文 Wiki能够解决大多数问题:http://wiki.ubuntu.org.cn/ Ubuntu中文论坛几乎能够解决所有可以解决的问题: http://forum.ubuntu.org.cn/ 也欢迎大家直接找我们解决问题; 但是不欢迎——你帮我安装吧/你帮我配好吧。 除非你获得过由我颁发的SMART GIRL头衔。

安装编译器和2D Server 看懂这一页需要读过《Ubuntu 9.04 速配指南》; It’s not over. 看懂这一页需要读过《Ubuntu 9.04 速配指南》; 安装编译器: sudo apt-get install build-essential 进入系统/系统管理/软件源,在软件源对话框中切换到第三方软件页面,点击添加: deb http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu jaunty main deb-src http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu jaunty main 安装Server: sudo apt-get update sudo apt-get install rcssserver rcsslogplayer 这里假定大家已经读过。 rcssserver是2D的server,rcsslogplayer是看比赛用的。联赛时我们会再讲这两个工具。

Eclipse 但愿大家都已经明白了编译器、编辑器、调试器、IDE的概念。 Eclipse是一个重量级IDE。 You are just a rectangle. 但愿大家都已经明白了编译器、编辑器、调试器、IDE的概念。 Eclipse是一个重量级IDE。 安装Eclipse之前,需要先安装JDK: sudo apt-get install sun-java6-jdk 从Eclipse官方网站下载页下载Eclipse IDE for C/C++ Developers (79 MB): http://www.eclipse.org/downloads/ 注意不要从Ubuntu软件源安装Eclipse。 将下载到的压缩包解压缩到任意位置,运行包内的eclipse。 不明白的同学,建议Google之。也可以向我索要《C++开发环境简要配置说明》,前911名免费。 也是我用的最顺手的。

Tags Cloud Ubuntu安装 rcssserver和rcsslogplayer gcc g++ gdb Eclipse Keywords Ubuntu安装 rcssserver和rcsslogplayer gcc g++ gdb Eclipse 为了给大家更直观的印象,我们请祝兄当场演示Ubuntu的安装和配置。

作业 在这里结束 留一点作业,然后大家就解放了。

作业 Soli Deo gloria. USTC OnlineJudge 1000 1001 1003 1004 Homework USTC OnlineJudge 1000 1001 1003 1004 安装Ubuntu和rcssserver 以上题目是锻炼编程语言熟练度的题目。不要求全部做完,也不检查作业。遇到问题也可以在邮件列表提出,做完或者做过一部分的同学也可以将ID和做题进度发到邮件列表。第一位做完的女生将获得SMART GIRL头衔。 第二项作业是为今后的课程做准备。 今天就到这里吧,感谢大家捧场。Soli Deo gloria. 最后我给大家演示一下如何在USTC OnlineJudge上做题。如果对今天的内容还有疑议,请立刻提出。 Soli Deo gloria.