1.2.2 C++取代C

2014-05-12 09:44:17 · 作者: · 浏览: 138

1.2.2  C++取代C

在Brian Kernighan和Dennis Ritchie发布第一版C (1978年)仅几年后,也就是1983年,Bjarne Stroustrup创建了一种新的语言,在C语言的基础上添加了面向对象的概念。这种语言就是C++,它很快也在Windows平台中流行起来。

C++允许将数据和功能封装在类中,同时还支持对象继承和多态性。通过这些功能,Windows的平面API可以表示为一组较小的实体,将数据结构和API操作组合成一个逻辑上下文。例如,与在UI上创建、显示和管理窗口相关的所有操作都可以归入一个称为Window的类。

C++方法可帮助开发人员更好地了解API,同时降低了Windows编程入门的门槛。例如,程序清单1-1中描述的“Hello, World”程序的基本组成部分可以围绕对象进行组织,如程序清单1-2所示。

程序清单1-2:采用C++语言的“Hello, World”程序蓝图(节选)
 

  1. // --- 表示主程序的类  
  2. class Main  
  3. {   
  4.  public:   
  5. static HINSTANCE hInstance;   
  6. static HINSTANCE hPrevInstance;   
  7. static int nCmdShow;   
  8. static int MessageLoop( void );  
  9. };  
  10.  
  11. // --- 表示窗口的类  
  12. class Window  
  13. {   
  14.  protected:   
  15. HWND hWnd;   
  16.  public:   
  17. HWND GetHandle( void ) { return hWnd; }   
  18. BOOL Show( int nCmdShow ) { return ShowWindow( hWnd, nCmdShow ); }   
  19. void Update( void ) { UpdateWindow( hWnd ); }   
  20. virtual LRESULT WndProc( UINT iMessage, WPARAM wParam, LPARAM lParam ) = 0;  
  21. };  
  22.  
  23. // --- 表示该程序的主窗口的类  
  24. class MainWindow : public Window  
  25. {   
  26. // --- 为简便起见省略了实现过程  
  27. }  
  28.  
  29. // --- 节选自Main类的实现  
  30. int Main::MessageLoop( void )  
  31. {   
  32. MSG msg;   
  33.  
  34. while( GetMessage( (LPMSG) &msg, NULL, 0, 0 ) )   
  35. {   
  36. TranslateMessage( &msg );   
  37. DispatchMessage( &msg );   
  38. }   
  39. return msg.wParam;  
  40. }  
  41.  
  42. LRESULT MainWindow::WndProc( UINT iMessage, WPARAM wParam, LPARAM lParam )  
  43. {   
  44. switch (iMessage)   
  45. {   
  46. case WM_CREATE:   
  47. break;   
  48. case WM_PAINT:   
  49. Paint();   
  50. break;   
  51. case WM_DESTROY:   
  52. PostQuitMessage( 0 );   
  53. break;   
  54. default:   
  55. return DefWindowProc( hWnd, iMessage, wParam, lParam );   
  56. }   
  57. return 0;  

通过C++提供的面向对象的方法,可以将对象行为打包到可重用的代码库中。程序员可以基于这些库创建程序,这样,他们只需定义与内置行为不同的那些行为。例如,他们需要重写程序清单1-2中的Paint()方法,以便重新绘制其窗口对象的UI。

采用了C++和对象库后,Windows编程发生了很大的变化。Microsoft创建了两个库,分别是Microsoft基础类(Microsoft Foundation Classes,MFC)和活动模板库(Active Template Library,ATL),在Microsoft的旗舰开发环境Visual Studio中仍维护并使用这两个库。

注意:接下来将介绍有关Visual Studio开发环境的详细信息。