1 / 32

网络游戏开发 -C++ 程序设计

第 1 章 C++ 程序设计基础. 网络游戏开发 -C++ 程序设计. 第 3 章函数. 标准库函数的使用 函数重载 内联函数. 标准库函数 函数重载. 函数重载. 了解标准库函数 掌握函数重载. 第 3 章函数. 3.4 标准库函数的使用. C++ 语言提供了极为丰富的库函数。. 第 3 章函数. 3.4 标准库函数的使用. C 语言标准库中的各个函数,类型以及宏分别在以下标准头文件中说明: assert.h float.h math.h stdarg.h stdlib.h

taipa
Download Presentation

网络游戏开发 -C++ 程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第1章 C++程序设计基础 网络游戏开发-C++程序设计

  2. 第3章函数 标准库函数的使用 函数重载 内联函数 标准库函数 函数重载 函数重载 了解标准库函数 掌握函数重载

  3. 第3章函数 3.4 标准库函数的使用 C++语言提供了极为丰富的库函数。

  4. 第3章函数 3.4 标准库函数的使用 C语言标准库中的各个函数,类型以及宏分别在以下标准头文件中说明: assert.h float.h math.h stdarg.h stdlib.h ctype.h limits.h setjmp.h stddef.h string.h errno.h locale.h signal.h stdio.h time.h 头文件声明格式为: #include <头文件名>

  5. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 1. 文件操作 <stdio.h> 打开一个流可以将该流与一个文件或设备关联起来,这一关联可以通过关闭流而终止。 打开一个文件将返回一个指向FILE类型对象的指针,包含控制该流的所有必要的信息。 C++应用程序 FILE 文件/设备

  6. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 1. 文件操作 FILE * fopen(const char * filename, const char* mode);

  7. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 1. 文件操作 • 关闭文件 int fclose(FILE * stream); • 删除文件 int remove(const char* filename); • 重命名文件 int rename(const char * oldname, const char *newname);

  8. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 2. 格式化输入函数 • fscanf函数 int fscanf(FILE * stream, const char * format, ...); int scanf(const char* format, ...); format 61 20 66 6f 78 20 66 61 6c 6c 20… %s a fox fall into water %f 3.25 00 00 50 40 %d 76 0x0000004c

  9. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 3. 字符输入输出函数 • fgetc函数 int fgetc(FILE * stream); 以unsigned char类型返回stream流中的一个字符。 • fgets函数 char * fgets(char *s, int n, FILE *stream); fgets函数用于读入最多n-1个字符到数组s中。

  10. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 3. 字符输入输出函数 • fputs函数 int fputs(const char *s, FILE *stream); 以unsigned char类型返回stream流中的一个字符。 • 其他输入输出函数 int getc(FILE *stream); int getchar(void); char *gets(char *s); int putc(int c, FILE * stream); int putchar(int c); int puts(const char *s); int ungetc(int c , FILE * stream);

  11. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 4. 直接输入输出函数 • fread函数 size_t fread(void *ptr, size_t size size_t nobj, FILE *stream); 读入最多nobj个长度为size的对象到ptr指向的数组中。 • fwrite函数 size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *stream); 把ptr所指向的数组中nobj个长度为size的对象输出到流stream中。

  12. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 5. 文件定位函数 • fseek函数 int fseek(FILE *stream, long offset, int origin); fseek函数用于文件定位,读写操作将从新位置开始。 offset是偏移量 origin是平移参考位置: • SEEK_SET(文件开始处) • SEEK_CUR(当前位置) • SEEK_END(文件结束处) 61 20 66 6f 78 20 66 61 6c 6c 20… 读/写指针 fread/fwrite

  13. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 5. 文件定位函数 • ftell函数 返回与stream流相关的文件的当前位置。 long ftell(FILE *stream); • rewind函数 等价于fseek(fp, 0L, SEEK_SET)与clearerr(fp)这两个函数顺序执行的效果。 void rewind(FILE *stream);

  14. 第3章函数 3.4 标准库函数的使用 3.4.1 输入和输出 6. 错误处理函数 当发生错误或到达文件末尾时,标准库中的许多函数将设置状态指示符。这些状态指示符可被显式地设置和测试。 void clearerr(FILE *stream); int feof(FILE *stream); int ferror(FILE *stream); void perror(const char *s);

  15. 第3章函数 3.4 标准库函数的使用 3.4.2 字符类测试 isalnum(c); //函数isalpha(c)或isdigit(c)为真。 isalpha(c); //函数isupper(c)或islower(c)为真。 iscntrl(c); //c为控制字符。 isdigit(c); //c十进制数字。 isgraph(c); //c是除空格外的可打印字符。 islower(c); //c是小写字母。 isprint(c); //c是包括空格的可打印字符。 ispunct(c); //c是除空格,字母和数字外的可打印字符。

  16. 第3章函数 3.4 标准库函数的使用 3.4.2 字符类测试 isspace(c); // c是空格,换页符,换行符,回车符,横向制表符和纵向制表符。 isupper(c); //c是大写字母。 isxdigit(c); //c是十六进制数字。 在7位ASCII字符集中, • 可打印字符: 0x20(‘ ’)~0x7E('`') • 控制字符: 0(NUL)~0x1F(US) 和字符0x7F(DEL) int tolower(int c); //把c转换为小写字母 int toupper(int c); //把c转换为大写字母

  17. 第3章函数 3.4 标准库函数的使用 3.4.3 字符串函数 1. str函数 在头文件<string.h>中定义了两组字符串函数: • 以str开头的函数 • 以mem开头的函数 • 拷贝 char *strcpy(char *strDestination, const char *strSource ); char *strncpy(char *strDest,const char *strSource,size_t count); • 追加 char *strcat(char *strDestination, const char *strSource); char *strncat(char *strDest, const char *strSource, size_t count); • 追加 int strcmp(const char *string1,const char *string2); int strncmp(const char *string1,const char *string2,size_t count );

  18. 第3章函数 3.4 标准库函数的使用 3.4.3 字符串函数 1. str函数 //返回一个指向字符串string中字符c最后一次出现的位置的指针,如果没有就返回NULL char *strchr(const char *string,int c); //返回字符串string中由字符串strCharSet中的字符构成的第一个子串的长度。 size_t strspn(const char *string, const char *strCharSet); //返回字符串string中由不在字符串strCharSet中的字符组成的第一个字串的长度。 size_t strcspn(const char *string,const char *strCharSet); //返回指向字符串strCharSet中的任意字符第一次出现在字符串string中的位置的指针 char *strpbrk(const char *string,const char *strCharSet); //字符串查找 char *strstr(const char *string,const char *strSearch ); size_t strlen(const char *string ); //求字符串长度 char *strerror(int errnum); //找出strDelimit分割的下一个单词 char *strtok( char *strToken, const char *strDelimit );

  19. 第3章函数 3.4 标准库函数的使用 3.4.3 字符串函数 1. 2. mem函数 void *memcpy(void* dest,const void* src,size_t count ); void *memmove(void* dest, const void* src, size_t count ); int memcmp(const void* buf1, const void* buf2, size_t count ); void *memset(void* dest, int c, size_t count );

  20. 第3章函数 3.4 标准库函数的使用 3.4.4 数学函数

  21. 第3章函数 3.4 标准库函数的使用 3.4.5 实用函数 • 数值转换 double atof(const char *s); int atoi(const char *s); long atol(const char *s); double strtod(const char *s, char **endp); long strtol(const char *s, char **endp, int base) unsigned long strtoul strtoul(const char* s, char **endp, int base); • 随机数函数 int rand(void); void srand(unsigned int seed); • 内存分配函数 void *calloc(size_t nobj, size_t size); void *malloc(size_t size); void *realloc(void *p, size_t size); void free(void *p);

  22. 第3章函数 3.4 标准库函数的使用 3.4.5 实用函数 • 其他函数 void abort(void); void exit(int status); int atexit(void (*fcn)(void)); int system(const char *s); char *getenv(const char *name) void bsearch (const void *key, const void *base, size_t n,size_t size, int (*cmp)(const void *keyval, const void *datum) ); void qsort(void *base,size_t n, size_t size,int (*cmp)(const void *, const void *)); int abs(int n) long labs(long n) div_t div(int num, int denom) ldiv_t ldiv(long num, long denom) 3.4.6 断言函数 void assert(int表达式);

  23. 第3章函数 3.4 标准库函数的使用 3.4.7 变长参数表 type va_arg(va_list ap,类型); void va_end(va_list ap); 3.4.8 日期与时间函数 time_t time(time *tp) char *asctime(const struct tm *tp); char *ctime(const time_t *tp); struct tm *gmtime(const time_t *tp); struct tm *localtime(const time_t *tp);

  24. 第3章函数 3.4 标准库函数的使用 3.4.7 变长参数表 头文件<limits.h>中定义了用于表示整数类型大小的常量

  25. 第3章函数 3.5 函数重载 功能相似 重载(overload)函数 void Eat(Beef …); void Eat(Fish …); void Eat(Chicken …); void EatBeef(…); void EatFish(…); void EatChicken(…); void Print(…); // 全局函数 class A {… void Print(…); // 成员函数 } 不是重载

  26. 第3章函数 3.5 函数重载 隐式类型转换导致重载函数产生二义性。 void output(int x); // 函数声明 void output(float x); // 函数声明 // output(0.5); // 错误!不明确的调用 output(int(0.5)); // 输出整型0 output(float(0.5)); // 输出浮点型0.5

  27. 第3章函数 3.6 内联函数 3.6.1 内联函数 用inline关键字修饰的函数是内联函数。 • 关键字inline必须与函数定义体放在一起才能使函数成为内联, • 将inline放在函数声明前面不起任何作用。 void Foo(int x, int y); inline void Foo(int x, int y) { … } • 如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。 • 如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。

  28. 第3章函数 3.6 内联函数 3.6.2 内联函数与带参的宏 内联函数的优势: • 类型安全检查 • 自动类型转换 • 可以作为类的成员

  29. 第3章函数 小结 本节课讲解函数的应用 • 标准库函数的使用 • 函数重载 • 内联函数

  30. 第3章函数 自测题 1.strcmp函数遇到不相同的两个字符后就停止比较。( ) 2.atof函数能将字符串转换为float型变量。( )

  31. 第3章函数 自测题 1.strcmp函数遇到不相同的两个字符后就停止比较。(对) 题目分析:函数只需要返回第一个不符合的字符就返回 2.atof函数能将字符串转换为float型变量。(错) 题目分析:返回类型为double型

  32. 第3章函数 课后作业 【作业1】利用标准库函数显示当前时间格式如下: 2007/11/20 15:34 【作业2】读取一个文本文件,用字符串函数查找任意单词在文件中出现的次数。

More Related