[达内C.教程_MKV]Core.C.Programming.ppt_第1页
[达内C.教程_MKV]Core.C.Programming.ppt_第2页
[达内C.教程_MKV]Core.C.Programming.ppt_第3页
[达内C.教程_MKV]Core.C.Programming.ppt_第4页
[达内C.教程_MKV]Core.C.Programming.ppt_第5页
已阅读5页,还剩500页未读 继续免费阅读

下载本文档

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

文档简介

1 Copyright Tarena Corporation, 2005. All rights reserved. Tarena High-End IT Training 加拿大达内科技(中国)公司 中国北京 电话:(010)62136369、62132839 地址:北京市海淀区北三环西路甲18号 (大钟寺附近)中鼎大厦B座7层 中国上海 电话:(021)61202630、61202603 地址:上海市北京东路668号 上海科技京城C区9层 加拿大多伦伦多 电话:(416)491-6456 地址:Suite 1208, Deerford Road, Toronto, Ontario, Canada 邮编:M2J 3J3 邮件:C 网址:www.tarena.ca 中国广州 电话:(020)85518868、85518898 地址:广州天河区岗顶侨鑫教育主楼三层 The C+ Programming Language Chapter 1 2 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 C+ Programming in UNIX u课程介绍 lC+ 语法基础 l面向对象程序设计的概念 l大量的编程实践 u目标 l熟练掌握C+语法 l具有面向对象程序设计的概念与能力 l能熟练阅读复杂的C+程序源代码 l能独立的设计与完成面向对象的C+程序 3 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 课程内容简介 1 uC+语言基础 l保留字 l变量,常量 l表达式 l语句 l函数 l程序的结构 l数据结构与算法 数组、指针、引用、结构、链表与栈 4 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 课程内容简介 2 uC+面向对象编程 l类 l构造函数与析构函数 l静态成员与友员 l函数重载 l继承与多态 uI/O流 u模板 u异常 5 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 程序设计语言介绍1 uWhat computer understand? lbits uAssembler Language lLimited structure lGlobal scope lMachine code uPrimitive High-Level Language lFunction decomposition lData separation lHigh level structure 6 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 程序设计语言介绍2 uBlock Structured Language lEncapsulation lFlexible data scoping lModularization uObject-Oriented Language lInheritance lPolymorphism lAbstract data types 7 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 C+程序设计语言 u1972,AT /main function int main() cout using namespace std; /main function int main() cout 与 #include“ “ uName space: 提供了一个全局标识符和全局变量所在 的作用域。 uint main() u注释 u函数 u函数的调用 ucout语句 28 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 头文件 u#include语句 u#include 与 #include “ “ 使用 #include using namespace std; 少用 #include 29 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 Main函数 umain函数的作用 uStandard C+ main( )格式: int main( ) return 0; /the default return value is 0; 30 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 注释 uC+的注释 31 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 基本的输出语句 ucout 32 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 练习程序hi.cc #include using namespace std; int main( ) cout using namespace std; int main() char name = “John“; cout using namespace std; int main (int argc, char* argv ) for(int i=0; i using namespace std; int main() unsigned int age; char name 50; cout name; cout age; cout ch; if (ch = y) /note the difference: if ( ch = y) cout u空白 46 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 C+的保留字 auto, bool, break, case, catch, char, class, const, const_cast , continue, default, delete, do, double, else, enum, extern, false, float, for, friend, goto, if, inline, int, long, new, operator, private, protected, public, return, short, signed, sizeof, static, struct, switch, template, this, throw, true, try, typedef, union, unsigned, virtual, void, while, 47 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 常量与变量 u内存 u程序的内存使用 l常量 l变量 l动态内存 u变量的类型 48 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 C+变量名 u变量名(identifier) l第一个字符必须是字母或下划线 l只能使用字母,数字,或下划线 l中间不能有空格 l不能是保留字,不能与全局函数和数据类型同名 uC+严格区分大小写(UNIX中) u使用易懂的变量名(一般是相关的英语单词或者缩写) u长度一般不要超过32个字符 不单是变量名,所有需要自己起名的地方都需要遵守这样的规则。 49 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 C+变量 uC+是强类型语言 l每一个变量都有确定的类型,且保持不变 u基本数据类型 l整型,int, l字符型, char, l实型, float, double, l逻辑型, bool ( standard c+ new feature ! ) 50 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 基本数据类型1 char, unsigned char, signed char, int, unsigned int, signed int, short int, unsigned short int, signed short int, long int, signed long int, unsigned long int, float, double, long double, bool void :enum,struct,union,array,pointer,class 51 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 基本数据类型2 u实型数据 (float, double) 无unsigned. 52 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 The standard C+ new features ubool: 其值必为关键字true 或false u四个转型运算子: lstatic_cast: compiling time to check data type(primitive). lconst_cast: only for constant data type converting. ldynamic_cast: usually for top-down data type cast. lreinterpret_cast: more general cast for all data types. (到多态的时候再详细讲) 53 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 变量与数据类型 uC+是强类型语言 l先声明,后使用 uC+编译器对变量声明的处理 54 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 一个使用变量的程序例子 #include using namespace std; int main( ) int i; i = 5; cout using namespace std; int main( ) i = 5; /see what happens cout using namespace std; int main() cout , =, u结合性 u优先级: see table 3-1 in page 35 in the recommended book 1. 62 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 运算符的使用 uif ( demo = 2 ) 与 if (demo = 2 ) if ( 2= demo ) /左值与右值。 uif ( demo != 2 ) 与 if ( demo =! 2 ) 63 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 运算符的优先级 int a=8,b=4,c=5; cout using namespace std; int main( ) int a = 10; cout a; unsigned int r; int k; unsigned int j; char str33; memset(str, 0, 33); str32=0; r = a; int i = 32; 70 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 练习程序bin.cc do j = r; r = r/2; k = j - r * 2; if (k) str-i = 1; else str-i = 0; while(r != 0); cout using namespace std; int main( ) int a, b, c,d; int e = (a = 1, b = a, c = a+b, d = c + 5); (a = 1, b = a, c = a+b, d = c + 5) = 8; cout 函数名( ) return u 86 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 函数定义的例子 #include using namespace std; void disp(char str ) cout 函数名( ); void disp( char* ); float average(int, int); float average(int a, int b); 为什么需要函数声明? 88 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 调用函数 u函数的形参 u函数的调用过程 l填入值参 l获得返回值 89 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 栈的技术简介 u栈的工作原理 u函数的调用与栈 90 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 栈的原理 i = f1( ); j = f2( ); cout using namespace std; int f1(); int f2(); int main( ) int i, j; i = f1( ); j = f2( ); cout =0 int bigsum(int a) if(a = 0) return 0; return a + bigsum(a - 1); int main() int n; cout n; int m = bigsum(n); cout using namespace std; int Area(int width, int length = 1) return width * length; int Area(int size) / int Area(int size, int leng) is not allowed return size * size; int main( ) cout using namespace std; void disp(const int I) cout using namespace std; int main( ) char line100; cout line; int ch = 0; for(int i=0; i using namespace std; int main( ) cout 数组名元素个数; u下标是数组元素到开始的偏移量 u数组下标从0开始 uchar buf4; buf0 buf1 buf2 buf3 119 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 数组2 u数组在声明时,元素个数必须是常量或常量表达式 char buf10; int I; char bufI; /? int I = 10; char bufI; /? const int i = 10; char bufi; char bufi+1; 120 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 数组3 u如果数组的声明带有初始化,可以直接对整个数组赋值 u访问数组元素,使用下标操作符 int iA10; iA0 = 0; iA1 = 1; uint I = 0; I = iA0 + iA1; 121 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 数组的初始化 u在声明的时候就初始化 int iA5 = 0,1,2,3,4; int iB = 1,2,3; u使用赋值语句初始化数组 iA0 = 0; iA1 = 1; u数组的边界问题 int iC5; iC10 = 100; /run time ? Question: does C+ compiler have array bound checking? 122 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 数组程序例子 u编写一个程序,从键盘接受一个字符串,将该字符串颠倒顺序 ,然后打印出来 123 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 练习程序findmax.cc #include using namespace std; int main( ) int iA = 103, 5, 68, 115, 32, 23, 66, 599, 38, 444; for(int i = 0; i using namespace std; int maximum(int 4, int, int); int main ( ) int sg34 = 68,77,73,86, 87,96,78,8 9, 90, 70, 81, 86; cout max) max = gradeij; return max; 126 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构1 u将不同类型的相关数据信息组织在一起 u是用户自定义的类型 l需要先声明类型的定义才能使用 u结构与数组的区别 l数组只是同一个数据类型的聚集 l数组本身不是一个新的数据类型 127 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构2 struct ; ; ; (结构变量名); struct Person char name20; unsigned long id; float salary; char address200; p1, p2; 128 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构的赋值1 u通过取成员操作(.)来引用结构变量的元素 Person p1 = “G.W Bush“, 1000010, 1.5 , “ZhongGuanChun, Beijing, China“; strcpy(, “G.W Bush“); p1.id = 1000010; p1.salary = 1.5; strcpy(p1.address, “ZhongGuanChun, Beijing, China“); 129 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构的赋值2 u结构赋值的例子 Person p1 = “G. W Bush“, 1000010, 1.5 , “ZhongGuanChun, Beijing, China“; Person p2 = p1; 130 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构的存储模式1 u每一个成员都有自己的存储空间 u对每一个成员的操作都是独立的,各元素间不会相互影 响 name id salary 131 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构的存储模式2 #include using namespace std; struct Person char name20; unsigned long id; float salary; ; int main( ) Person p1 = “Zhang Weilong“, 1000101, 32; cout *; int* ip; const int * icp; char * str; uNULL指针 138 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 指针的操作 u取地址操作符 int i = 89; ip = u引用指针指向的变量 * l获得该指针所指向的变量 lint j = 0; j = *ip; cout using namespace std; int main( ) int var1 = 11; int var2 = 22; int * ptr; ptr = cout using namespace std; int j; int iv5 = 1,2,3,4,5; int main() int a = 800; int i; int b = 900; int *ptr = i = 500; cout )操作来存取成员 147 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构数组 u数组的元素是某一个结构类型 struct Person char name20; unsigned long id; float salary; char address200; ; Person allPeople100; 148 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构中的数组元素 u结构中的某个元素是数组类型 struct Person char name20; unsigned long id; float salary; char address200; ; Person Jack = “Jack“, 2L, 8000.00, “Toronto“; 149 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 指针作形参 u利用指针在函数中传递参数 150 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 程序swap1.cc #include using namespace std; void swap(int, int); int main( ) int a = 3, b = 8; cout using namespace std; void swap(int *, int * ); int main( ) int a = 3, b = 8; cout using namespace std; int main( ) void bsort(int*, int); const int N =10; int dataN= 37,84,62,91,11,65,57,28,19,49; int *arr = new intN; for( int i=0; i * numb2) int temp = * numb1; *numb1 = * numb2; *numb2 = temp; 164 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 危险的指针用法 u使用NULL指针的内容 u使用没有初始化的指针变量 u使用已经被delete 的指针内容 u函数返回局部变量的地址 u由函数申请的堆空间,而由调用者来释放 165 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 函数指针 u调用一个函数 l函数都有地址,存放在内存的代码区(code). u函数指针 l函数指针指向代码区中的某个函数。 u函数指针的声明 int (*func) (char a, char b); int * func (char a, char b); /how about this one? 166 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 函数指针 ufunc is a pointer that points to a function. Example: lint fn1 (char a, char b); lint* fn2(char x, char y); lint fn3(int a); lint (* fp1) (char a, char b); lint ( * fp2) (int s); fp1 = fn1; /ok fp1 = fn2; /error fp2 = fn3; / ok fp2 = fp1; /error fp1 = fn2(a, b); /error. fp1(a, b); /ok 167 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 函数指针 funcptr.cc #include using namespace std; int swap(int *a, int *b) int t; t = *a; *a = *b; *b = t; int main() int i = 100; int j = 200; int m = 300; int n = 400; cout using namespace std; int main() int iVal = 100; cout using namespace std; void disp(int void swap(int int main( ) int a = 3, b = 8; cout using namespace std; int return t; int main() int n = getInt(888); int m = getInt(999); cout using namespace std; int return *p; int main() int cout ; ; 186 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构的定义 struct Person char name30; unsigned int age; char address100; float salary; ; 187 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构的操作1 void setName(Person *pP, char* str) strcpy(pP-name, str); void setAge(Person *pP, unsigned int yr) pP-age = yr; void setSalary(Person *pP, float s) pP-salary = s; void setAddress(Person *pP, char* addr) strcpy(pP-address, addr); 188 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 结构的操作2 void disp(Person *pP ) cout name age address salary int main( ) Person Jack = “Jack“, 30, “Beijing China“, 8000.0; disp( Person somebody; setName( setAge( setAddress( setSalary( disp( 190 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 封装好的结构1 struct Person char name30; unsigned int age; char address100; float salary; void setName(char*); void setAge(unsigned int); void setAddress(char*); void setSalary(float); void disp( ); ; 191 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 封装好的结构2 void Person:setName(char* str) strcpy(name, str); void Person:setAge(unsigned int yr) age = yr; void Person:setSalary(float s) salary = s; void Person:setAddress(char* addr) strcpy(address, addr); 192 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 封装好的结构3 void Person:disp( ) cout int main( ) Person Jack = “Jack“, 30, “Beijing China“, 8000.0; Jack.disp( ); Person somebody; somebody.setName( “Lisa“ ); somebody.setAge( 20 ); somebody.setAddress( “Toronto, Canada“ ); somebody.setSalary(6000.0); somebody.disp( ); 194 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 仍然存在的问题 #include int main( ) Person Jack = “Jack“, 30, “Beijing China“, 8000.0; Jack.disp( ); Jack.salary = 1000.00; Jack.disp( ); 195 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 如何实现数据隐藏 u引入class类型 u对数据成员进行保护 l增加存取范围 私有成员private 保护成员protected 公共成员public 196 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 定义类来实现数据隐藏 class Person private: char name30; unsigned int age; char address100; float salary; public: void setName(char* str); void setAge(unsigned int yr); void setAddress(char *str); void setSalary(float yuan); void disp( ); ; 197 外企的师资、外企的技术、外企的品质外企的师资、外企的技术、外企的品质北京:北京010-62196102 上海上海广州:广州:020-85518868020-85518868 类成员的作用域属性 u在C+中,class与struct的区别 lstruct的缺省作用域为public lclass的缺省作用域为private uprivate的数据成员 l只

温馨提示

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

最新文档

评论

0/150

提交评论