C艹+编程简介 函数原型与函数特征 数据声明与作用过 类、对象、构造函数与析构函数 输入输出 函数、参数传递与函数返回值 函数名重载与操作符重载 动态存储分配 友元函数与内联函数 结构、联合与类 模板类
1 ◼ 函数原型与函数特征 ◼ 数据声明与作用域 ◼ 类、对象、构造函数与析构函数 ◼ 输入/输出 ◼ 函数、参数传递与函数返回值 ◼ 函数名重载与操作符重载 ◼ 动态存储分配 ◼ 友元函数与内联函数 ◼ 结构、联合与类 ◼ 模板类
函数原型 下面的程序给出了典型的C程序结构,它是 Hel, world”程序的变型。 这个程序由三个文件组成: / File: hello.h */ char *helloo; / File: hello. c # include包括 sprintf()的原型* # include/包括malo(的原型*/ # include/包括 strlen()的原型* # include" hello.h"/包括hell0)的原型*2
2 函数原型 ◼ 下面的程序给出了典型的C 程序结构,它是 “Hello, world”程序的变型。 ◼ 这个程序由三个文件组成: /* File: hello.h */ char *hello( ); /* File: hello.c */ # include /*包括sprintf ( )的原型*/ # include /*包括malloc( )的原型*/ # include /*包括strlen( )的原型*/ # include "hello.h" /*包括hello( )的原型*/
char hello(name) char name char *value;/*返回串" Hello,name.".* value =(char *)(malloc(9+strlen(name)); sprintf (value, Hello OS name return value, File: main.c r/ # include/包括 printf()的原型*/ # include" hello.h"/包括hell0)的原型*/
3 char *hello(name) char *name; { char *value; /*返回串 "Hello, name.". */ value = (char *)(malloc(9+strlen(name)); sprintf (value, "Hello, %s.", name); return value; } /* File: main.c */ # include /*包括printf ( )的原型*/ # include "hello.h" /*包括hello( )的原型*/
main(argc, argv) int argc, char argyl i printf(" %s", hello("world)); 头文件名字的后缀用“h”表示,程序文件 名字的后缀用“c”表示。 hel.h:包含heo函数的原型。main函数 可通过“# include”定向到该原型的定义文 件,取得对原型的访问性
4 main(argc, argv) int argc; char *argv[ ]; { printf("%s", hello("world")); } ◼ 头文件名字的后缀用“.h”表示,程序文件 名字的后缀用“.c”表示。 ◼ hello.h:包含 hello函数的原型。main函数 可通过“# include”定向到该原型的定义文 件,取得对原型的访问性
hello.c:这是hel函数的定义文件。它通过 个 string类型的形式参数接受需要打印的 串,返回一个 sstring类型的值作为打印串。 返回类型必须与在#ncud定向的“h文件 中所给出的原型的类型匹配。 man. c:这是打印“Hell,word”的主程序 它构造和返回一个欢迎词字符串,其结果通 过函数prin打印出来。 C把函数和数据定义放在后缀为“c”的代 码文件中。在各代码文件中使用后缀为“h” 的 include文件,定义对其它各模块的调用接
5 ◼ hello.c:这是hello函数的定义文件。它通过 一个string类型的形式参数接受需要打印的 串, 返回一个string类型的值作为打印串。 返回类型必须与在#include定向的“.h”文件 中所给出的原型的类型匹配。 ◼ main.c:这是打印“Hello, world”的主程序, 它构造和返回一个欢迎词字符串,其结果通 过函数printf打印出来。 ◼ C 把函数和数据定义放在后缀为“.c”的代 码文件中。在各代码文件中使用后缀为“.h” 的include文件, 定义对其它各模块的调用接 口
C++的函数特征 特征是函数参数表的描述。 利用特征信息可进行严格的类型检查。它 允许编译器检验实际参数的数目是否正确, 对应的形参和实参是否相容,函数返回的 类型与函数调用的环境是否相容。 它克服了在许多C程序的开发中,由于在 C原型中没有定义参数的类型和数量,而 造成的实参和形参之间不匹配,函数返回 类型与使用之间不匹配等许多缺陷
6 C++的函数特征 ◼ 特征是函数参数表的描述。 ◼ 利用特征信息可进行严格的类型检查。它 允许编译器检验实际参数的数目是否正确, 对应的形参和实参是否相容,函数返回的 类型与函数调用的环境是否相容。 ◼ 它克服了在许多 C 程序的开发中,由于在 C 原型中没有定义参数的类型和数量,而 造成的实参和形参之间不匹配,函数返回 类型与使用之间不匹配等许多缺陷
现用C++语句改写前面的C程序。 C++程序在“h”文件中对heo(使用了 函数特征。对于hel()的原型: ◆不要求形式参数的名字出现在特征中 参数的数目和类型,以及返回类型,都 完整地在函数说明中定义 C++允许在函数说明时,在括号内直接声明 形式参数的类型。 除了标准注释分界符(…外,C++还接 受以∥开始,直到该行末尾的注释
7 ◼ 现用 C++ 语句改写前面的 C 程序。 ◼ C++ 程序在“.h”文件中对 hello( ) 使用了 函数特征。对于 hello( ) 的原型: ◆ 不要求形式参数的名字出现在特征中 ◆ 参数的数目和类型,以及返回类型,都 完整地在函数说明中定义 ◼ C++允许在函数说明时, 在括号内直接声明 形式参数的类型。 ◼ 除了标准注释分界符 (/*...*/) 外,C++还接 受以 // 开始,直到该行末尾的注释
File: hello.h */ char hello( char =) File: hello. cpp *, # include/)含函数 sprintf()的原型 # include/包含函数 strlen(的原型 # include hello. h/包含函数 hello(的原型 char hello(char name)& char value- new char 9+ strlen(name) sprintf (value, Hello, %os. " name) return value:
8 /* File: hello.h */ char *hello(char *); /* File: hello.cpp */ # include //包含函数sprintf( )的原型 # include //包含函数strlen( )的原型 # include “hello.h” //包含函数hello( )的原型 char *hello(char *name) { char *value = new char [9 + strlen(name)]; sprintf (value, "Hello, %s.", name); return value; }
/* File: main cpp */ # include∥/说明输出流对象cout # include"heoh"/包含函数 hello()的原型 main(int argc, char * argvlDi cout<< hello( world );
9 /* File: main.cpp */ # include //说明输出流对象cout # include "hello.h" //包含函数hello( )的原型 main(int argc, char *argv[ ]) { cout << hello("world"); }
C++的数据声明 C++的数据声明将数据名与数据类型联系起 来。其主要形式有: ◆常数值:如25,13.4,“ value is”,它们的 内容保持不变。 ◆变量:数据类型的实例,在程序执行时可 以改变其内容。 ◆常量:数据声明时在变量名前冠以保留字 const,如 const int maX=500,可定义 个常量。其内容在声明时给定,在声明它 的程序运行时内容再赋值无效
10 C++的数据声明 ◼ C++的数据声明将数据名与数据类型联系起 来。其主要形式有: ◆ 常数值:如25, 13.4, “value is”, 它们的 内容保持不变。 ◆ 变量:数据类型的实例, 在程序执行时可 以改变其内容。 ◆ 常量:数据声明时在变量名前冠以保留字 const,如 const int MAX = 500, 可定义 一 个常量。其内容在声明时给定,在声明它 的程序运行时内容再赋值无效