C/C++ 初级实务射手培训课程 C0002He Shiming2010-7射手科技 SPlayer.org
C语言特性概述C++特性STLWindows下C/C++控制台应用程序开发C/C++未来趋势本课涉及…射手科技 SPlayer.org
C语言基础知识重要的C语言特性射手科技 SPlayer.org
C是一个结构化、过程化的语言C的编译结果是机器码C语言是使用C语言和汇编语言实现的C语言是跨平台的C语言没有GarbageCollectorC语言有数据类型概念(Strong-typed)C语言基础概述射手科技 SPlayer.org
Compiler(编译器)将英语文书式的“程序片断”(函数/function)翻译成CPU指令(即机器码),这一步产生的结果是“目标文件”.obj/.oLinker(连接器)将“目标文件”按照需要连接在一个大文件中,以便一个函数能找到另一个函数,最后根据操作系统特性加入引导代码,产生可执行程序C语言与Compiler, Linker射手科技 SPlayer.org
机器码是CPU能直接执行的指令序列和数据段CPU所提供的指令数量非常有限,以计算为主编译器负责把无限的程序逻辑翻译成有限的CPU指令,并通过这些指令实现所有的上层功能应用汇编语言的指令与CPU指令几乎一一对应MOV AL, 00HCompiler,机器码与汇编语言射手科技 SPlayer.org
Unicode使用wchar_t作字符串(16bit)wchar_t text[] = L”Unicode String”;Unicode使用库功能带有w字样用于区分非UnicodeAPI/库功能sprintf->swprintfitoa-> _itowstd::string ->std::wstringC库功能,为防止Buffer overflow和Buffer underrun为大多数字符串相关功能提供了安全版本swprintf->swprintf_s_itow-> _itow_sC语言与Unicode、安全问题射手科技 SPlayer.org
函数定义和调用机制void print_number(int x){printf(“x = %d”, x);}int main(void){print_number(1);  return 0;}C语言的机制(函数)射手科技 SPlayer.org
指针是数据在内存中的地址int       value           = 1;int*      value_ptr       = &value;wchar_tsingle_char     = L’a’;wchar_t*  single_char_ptr = &single_char;wchar_t   text[]          = L”Sample Text”;wchar_t** text_ptr = &text;指针是一个整数intactual_value = (int)value_ptr; // on 32bit machinesprintf(“pointer value: %#x”, actual_value);// outputs: pointer value: 0x0003FA930C语言的机制(指针)射手科技 SPlayer.org
指针用于函数间传递和共享参数void SetParameter(int* num_ptr_in){  *num_ptr_in = 10;}int main(void){int i;SetParameter(&i);  // i = 10 at this point}C语言的机制(指针)射手科技 SPlayer.org
函数调用时使用引用(Reference)void SetMyValue(int& value){int& localvalue = value;localvalue = 10;}int main(void){int value = 0;SetMyValue(value);  // value = 10 at this point  return 0;}引用(Reference)在C语言内是使用指针实现的引用(Reference)概念射手科技 SPlayer.org
从C走向C++C++对C的改进和增强射手科技 SPlayer.org
C++是面向对象的C++兼容全部C语法和类库C++没有GarbageCollectorC++提供标准模板库STL以快速开发日常需求C++代码由于其面向对象机制和附带STL的强大功能,要比纯C代码更简洁、更容易理解从C走向C++射手科技 SPlayer.org
类、对象创建与销毁class Bus{public:  void Go();  void Stop();private:intm_current_state;};Bus* bus = new Bus();bus->Go();bus->Stop();delete bus;C++基本机制射手科技 SPlayer.org
函数重载void print_number(int x){printf(“x = %d”, x);}void print_number(double x){printf(“x = %g”, x);}C++重载机制(Overload)射手科技 SPlayer.org
模板概念类似于宏模板不是继承,是实例化模板化的代码较继承化的代码更干净简洁、易懂C++模板机制概述射手科技 SPlayer.org
宏实现#define MULTIPLY_AND_DIVIDE_BY255(color1, color2) (color1*color2/255)...int    result  = MULTIPLY_AND_DIVIDE_BY255(128, 55);double result2 = MULTIPLY_AND_DIVIDE_BY255(144.0, 34.3);模板实现template<class T>class Calculator{public:  static T MultiDivide255(T color1, T color2)  {    return color1 * color2 / 255;  }};...int    result  = Calculator<int>::MultiDivide255(128, 55);double result2 = Calculator<double>::MultiDivide255(144.0, 34.3);C++模板机制概述(宏与模板)射手科技 SPlayer.org
C++的class对应C语言的struct,是完全依靠C语言的struct实现的,其在内存的二进制表现形式相同class Bus{public:  void Go();  void Stop();public:intm_current_state;};// is equivalent tostruct Bus{ void Go(){}  void Stop(){}intm_current_state;};C++是用C语言实现的射手科技 SPlayer.org
C语言提供的运行库主要解决:内存分配 (malloc, etc)控制台I/O (printf, etc)文件I/O (fopen, etc)数据和字符串格式化 (sprintf, itoa, strcpy, etc)数学计算和日期 (gmtime64, sqrt, etc)检索排序、线程和其他系统服务C Run-Time (CRT) 与 C++ Run-Time (CPPRT)射手科技 SPlayer.org
C++语言提供的运行库以STL(Standard Template Library)模板形式提供,其本质是为日常需求提供容器,方便处理数组、映射、队列等常用数据关系:vectormaplistqueueC Run-Time (CRT) 与 C++ Run-Time (CPPRT)射手科技 SPlayer.org
C++应用之STLStandard Template Library的特性与应用射手科技 SPlayer.org
C语言的数组(Array)// static arrayintstatic_array[] = {1,2,3,4,5};intsizeof_static_array = sizeof(static_array) / sizeof(static_array[0]);// static array cannot be resized// dynamic arrayintsizeof_dyn_array = 5;int* dyn_array = (int*) malloc(sizeof(int) * sizeof_dyn_array);dyn_array[0] = 1;// resize a dynamic arraysizeof_dyn_array = 50;dyn_array = (int*) realloc(dyn_array, sizeof(int) * sizeof_dyn_array);// dyn_array now contains 50 elementsfree(dyn_array);C++STL应用实务之vector射手科技 SPlayer.org
C++中使用std::vector<>作数组std::vector<int> vector_array(5);	// 5 entries at initializationvector_array[0] = 10;		// set entry using the same array syntaxvector_array.push_back(20);	// append at the end of arrayvector_array.resize(100);		// resize to 100 entriesint* va_ptr = &vector_array[0];	// obtain C-compatible array pointer// vector is a container, it can be used on any types of objectsstd::vector<std::wstring> str_array;std::vector<double> real_array;C++STL应用实务之vector射手科技 SPlayer.org
std::vector<>的正确使用std::vector<int> vector_array;	// an empty arraytry{int value = vector_array.at(0);	// try checked access element #1}catch(...){  // bound overflow exception will be thrown by std::vectorprintf(“oops”);}C++STL应用实务之vector射手科技 SPlayer.org
std::vector<>的正确使用std::vector<int> vector_array;	// an empty arraytry{int value = vector_array[0];	// try unchecked access element #1}catch(...){printf(“oops”);}// no exception will be thrown// program will crashC++STL应用实务之vector射手科技 SPlayer.org
std::vector<>的正确使用std::vector<int> vector_array;int* va_ptr = &vector_array[0];	// may crash if array is not initialized				// and have at least 1 elementC++STL应用实务之vector射手科技 SPlayer.org
std::vector<>的数组外日常应用unsigned char* buffer = new unsigned char[1024];// file opened to |file_handle|fread(buffer, 1, 1024, file_handle);// use the content in buffer, then destroy to free up memorydelete[] buffer;// stl versionstd::vector<unsigned char> buffer;buffer.resize(1024);fread(&buffer[0], 1, 1024, file_handle);C++STL应用实务之vector射手科技 SPlayer.org
Windows平台的C/C++程序特性与当前趋势操作系统特殊性,和语言的发展趋势射手科技 SPlayer.org
malloc() – 使用C++new和智能指针printf()– 仅适用于sprintf_s()和swprintf_s()fopen() – 仅适用于wfopen()和_wfopen_s()scanf(), sscanf(), fscanf()– 不再适用getch(), getchar() – 不再适用iostream (cout, cin) –不常用fstream – 不常用Windows平台C/C++应用程序射手科技 SPlayer.org
在大型项目中用于单元测试下列内容:文件读写网络交互数据格式辨别和导入多线程机制Controller(控制器)机制的类Model(数据模型)机制的类编写上对WindowsAPI和C/C++的库都有依赖,但主要依靠C/C++库Windows平台C++语言控制台应用程序射手科技 SPlayer.org
关于C99关于C++ Technical Report 1 (TR1)关于C++ TR2, C++0x, boostC和C++应用程序开发的现状射手科技 SPlayer.org

C_CPP 初级实物