虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

MULTI-class

  • c#简单计算器

    // 学生管理.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "resource.h" #define MAX_LOADSTRING 100 // Global Variables: HINSTANCE hInst; // current instance TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text // Foward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); struct person {   char name[10];   int ID;   int cj_yw;   int cj_sx;   struct person* next;   struct person* pro; }per; int APIENTRY WinMain(HINSTANCE hInstance,                      HINSTANCE hPrevInstance,                      LPSTR     lpCmdLine,                      int       nCmdShow) {   // TODO: Place code here. MSG msg; HACCEL hAccelTable; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Perform application initialization: if (!InitInstance (hInstance, nCmdShow))  { return FALSE; } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MY); // Main message loop: while (GetMessage(&msg, NULL, 0, 0))  { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))  { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } // //  FUNCTION: MyRegisterClass() // //  PURPOSE: Registers the window class. // //  COMMENTS: // //    This function and its usage is only necessary if you want this code //    to be compatible with Win32 systems prior to the 'RegisterClassEx' //    function that was added to Windows 95. It is important to call this function //    so that the application will get 'well formed' small icons associated //    with it. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX);  wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MY); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = (LPCSTR)IDC_MY; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx(&wcex); } // //   FUNCTION: InitInstance(HANDLE, int) // //   PURPOSE: Saves instance handle and creates main window // //   COMMENTS: // //        In this function, we save the instance handle in a global variable and //        create and display the main program window. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) {    HWND hWnd;    hInst = hInstance; // Store instance handle in our global variable    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);    if (!hWnd)    {       return FALSE;    }    ShowWindow(hWnd, nCmdShow);    UpdateWindow(hWnd);    return TRUE; } // //  FUNCTION: WndProc(HWND, unsigned, WORD, LONG) // //  PURPOSE:  Processes messages for the main window. // //  WM_COMMAND - process the application menu //  WM_PAINT - Paint the main window //  WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; TCHAR szHello[MAX_LOADSTRING]; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); switch (message)  { case WM_COMMAND: wmId    = LOWORD(wParam);  wmEvent = HIWORD(wParam);  // Parse the menu selections: switch (wmId) { case IDM_ABOUT:   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);   break; case IDM_EXIT:   DestroyWindow(hWnd);   break; default:   return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... RECT rt; GetClientRect(hWnd, &rt); DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam);    }    return 0; } // Mesage handler for about box. LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)  { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; }     return FALSE; }

    标签: 计算器 学生

    上传时间: 2016-12-29

    上传用户:767483511

  • 简单的计算器

    // 学生管理.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "resource.h" #define MAX_LOADSTRING 100 // Global Variables: HINSTANCE hInst; // current instance TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text // Foward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); struct person {   char name[10];   int ID;   int cj_yw;   int cj_sx;   struct person* next;   struct person* pro; }per; int APIENTRY WinMain(HINSTANCE hInstance,                      HINSTANCE hPrevInstance,                      LPSTR     lpCmdLine,                      int       nCmdShow) {   // TODO: Place code here. MSG msg; HACCEL hAccelTable; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Perform application initialization: if (!InitInstance (hInstance, nCmdShow))  { return FALSE; } hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_MY); // Main message loop: while (GetMessage(&msg, NULL, 0, 0))  { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))  { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } // //  FUNCTION: MyRegisterClass() // //  PURPOSE: Registers the window class. // //  COMMENTS: // //    This function and its usage is only necessary if you want this code //    to be compatible with Win32 systems prior to the 'RegisterClassEx' //    function that was added to Windows 95. It is important to call this function //    so that the application will get 'well formed' small icons associated //    with it. // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX);  wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_MY); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = (LPCSTR)IDC_MY; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); return RegisterClassEx(&wcex); } // //   FUNCTION: InitInstance(HANDLE, int) // //   PURPOSE: Saves instance handle and creates main window // //   COMMENTS: // //        In this function, we save the instance handle in a global variable and //        create and display the main program window. // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) {    HWND hWnd;    hInst = hInstance; // Store instance handle in our global variable    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);    if (!hWnd)    {       return FALSE;    }    ShowWindow(hWnd, nCmdShow);    UpdateWindow(hWnd);    return TRUE; } // //  FUNCTION: WndProc(HWND, unsigned, WORD, LONG) // //  PURPOSE:  Processes messages for the main window. // //  WM_COMMAND - process the application menu //  WM_PAINT - Paint the main window //  WM_DESTROY - post a quit message and return // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; TCHAR szHello[MAX_LOADSTRING]; LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); switch (message)  { case WM_COMMAND: wmId    = LOWORD(wParam);  wmEvent = HIWORD(wParam);  // Parse the menu selections: switch (wmId) { case IDM_ABOUT:   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);   break; case IDM_EXIT:   DestroyWindow(hWnd);   break; default:   return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... RECT rt; GetClientRect(hWnd, &rt); DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam);    }    return 0; } // Mesage handler for about box. LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)  { EndDialog(hDlg, LOWORD(wParam)); return TRUE; } break; }     return FALSE; }

    标签: 学生 计算器

    上传时间: 2016-12-29

    上传用户:767483511

  • java学生数据库

    /*import java.util.Scanner; //主类 public class student122 {   //主方法   public static void main(String[] args){     //定义7个元素的字符数组     String[] st = new String[7];     inputSt(st);       //调用输入方法     calculateSt(st);   //调用计算方法     outputSt(st);      //调用输出方法   }   //其他方法   //输入方法 private static void inputSt(String st[]){     System.out.println("输入学生的信息:");   System.out.println("学号 姓名 成绩1,2,3");   //创建键盘输入类   Scanner ss = new Scanner(System.in);   for(int i=0; i<5; i++){     st[i] = ss.next(); //键盘输入1个字符串   } }   //计算方法 private static void calculateSt(String[] st){   int sum = 0;         //总分赋初值 int ave = 0;         //平均分赋初值 for(int i=2;i<5;i++) {   /计总分,字符变换成整数后进行计算   sum += Integer.parseInt(st[i]); } ave = sum/3;         //计算平均分 //整数变换成字符后保存到数组里 st[5] = String.valueOf(sum); st[6] = String.valueOf(ave); }   //输出方法 private static void outputSt(String[] st){     System.out.print("学号 姓名 ");   //不换行   System.out.print("成绩1 成绩2 成绩3 ");   System.out.println("总分 平均分");//换行   //输出学生信息   for(int i=0; i<7; i++){     //按格式输出,小于6个字符,补充空格     System.out.printf("%6s", st[i]);   }   System.out.println();            //输出换行 } }*/   import java.util.Scanner;   public class student122 {   public static void main(String[] args) { // TODO 自动生成的方法存根 String[][] st = new String[3][8]; inputSt(st); calculateSt(st); outputSt(st); }   //输入方法 private static void inputSt(String st[][]) { System.out.println("输入学生信息:"); System.out.println("班级 学号 姓名 成绩:数学 物理 化学"); //创建键盘输入类 Scanner ss = new Scanner(System.in); for(int j = 0; j < 3; j++) { for(int i = 0; i < 6; i++) { st[j][i] = ss.next(); } } } //输出方法 private static void outputSt(String st[][]) { System.out.println("序号 班级 学号 姓名 成绩:数学 物理 化学 总分 平均分"); //输出学生信息 for(int j = 0; j < 3; j++) { System.out.print(j+1 + ":"); for(int i = 0; i < 8; i++) { System.out.printf("%6s", st[j][i]); } System.out.println(); } }     //计算方法     private static void calculateSt(String[][] st)     {      int sum1 = 0;      int sum2 = 0; int sum3 = 0;      int ave1 = 0;      int ave2 = 0;      int ave3 = 0;      for(int i = 3; i < 6; i++)      {      sum1 += Integer.parseInt(st[0][i]);      }      ave1 = sum1/3;           for(int i = 3; i < 6; i++)      {      sum2 += Integer.parseInt(st[1][i]);      }      ave2 = sum2/3;           for(int i = 3; i < 6; i++)      {      sum3 += Integer.parseInt(st[2][i]);      }      ave3 = sum3/3;           st[0][6] = String.valueOf(sum1);      st[1][6] = String.valueOf(sum2);      st[2][6] = String.valueOf(sum3);      st[0][7] = String.valueOf(ave1);      st[1][7] = String.valueOf(ave2);      st[2][7] = String.valueOf(ave3);     } }

    标签: java 数据库

    上传时间: 2017-03-17

    上传用户:simple

  • MPO与MTP接插件的定义与区别

    The CommScope InstaPATCH® 360 and ReadyPATCH® solutions utilize a standards-compliant multi-fiber connector to provide high density termination capability. The connector is called an MPO (Multi-fiber Push On) connector by the standards. In many cases, multi-fiber connector products are referred to as MTP connectors. This document is intended to clarify the difference between the two terms – MPO and MTP.

    标签: MPO MTP 插件 定义

    上传时间: 2017-04-12

    上传用户:asdfghjkl1234567890

  • 2民生行用卡源代码

    Received: from mail.creditcard.cmbc.com.cn (unknown [111.205.122.39]) by newmx82.qq.com (NewMx) with SMTP id  for <714620454@QQ.COM>; Fri, 20 Oct 2017 03:56:09 +0800 X-QQ-FEAT: nHaaMjwLeTyzuDp5C5V++RVfPHSVEqOujK0vwZroSro= X-QQ-MAILINFO: MjJD59SVx+LnQ1oU2sDuZ8tZJyZAOGTJaybWFAYRjurknrZoc6gjmnU06 o+pkiTJsdtxgA5CmtpN2ggrWb/T2GoG07QFXqgJtIk+5X1iaz4UykQ9M2a782+Fdn83doxC 4Ej1t99JoZcj8dDkeM5dzZTSR8uZGwHEnIK9Uim+NcaroB2EUWgclSmSzIxUHIbJ1nTLA8G B4/wa X-QQ-mid: mx82t1508442969ti70kc84u X-QQ-ORGSender: master@creditcard.cmbc.com.cn Received: from sedm([195.203.59.13]) by mail.creditcard.cmbc.com.cn(1.0) with SMTP id sedm587; Thu, 19 Oct 2017 17:48:11 +0800 Date:Thu, 19 Oct 2017 17:48:11 +0800 (CST) Message-ID:<0305-euid-31911508406491578> To:=?gbk?B?zsTS1SDFrsq/?=<714620454@QQ.COM> From:master<master@creditcard.cmbc.com.cn> Subject: =?gbk?B?w/HJ+tDF08O/qDIwMTfE6jEw1MK159fTttTVy7Wl?= X-Priority: 3 X-MSMail-Priority: Normal MIME-Version: 1.0 Content-Type: multipart/related; boundary="****MAIN_BOUNDARY****2727BD00F7949069C75FEDD44F1F2988" This is a multi-part message in MIME format. --****MAIN_BOUNDARY****2727BD00F7949069C75FEDD44F1F2988 Content-Type: multipart/alternative; boundary="****SUB_BOUNDARY****2727BD00F7949069C75FEDD44F1F2988" --****SUB_BOUNDARY****2727BD00F7949069C75FEDD44F1F2988 Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: base64

    标签: 源代码

    上传时间: 2017-11-17

    上传用户:wendingchang

  • java入门编程合集

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?    //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第1个月的兔子对数:    1"); System.out.println("第2个月的兔子对数:    1"); int f1 = 1, f2 = 1, f, M=24;      for(int i=3; i<=M; i++) {       f = f2;       f2 = f1 + f2;       f1 = f;       System.out.println("第" + i +"个月的兔子对数: "+f2);          } } } 【程序2】    题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。    public class lianxi02 { public static void main(String[] args) {     int count = 0;     for(int i=101; i<200; i+=2) {      boolean b = false;      for(int j=2; j<=Math.sqrt(i); j++)      {         if(i % j == 0) { b = false; break; }          else           { b = true; }      }         if(b == true) {count ++;System.out.println(i );}                                   }     System.out.println( "素数个数是: " + count); } } 【程序3】    题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。 public class lianxi03 { public static void main(String[] args) {      int b1, b2, b3; 

    标签: java 编程

    上传时间: 2017-12-24

    上传用户:Ariza

  • 基于频率插值的4.0kbps 语音编码器的性能和设计(英文)

    The 4.0 kbit/s speech codec described in this paper is based on a Frequency Domain Interpolative (FDI) coding technique, which belongs to the class of prototype waveform Interpolation (PWI) coding techniques. The codec also has an integrated voice activity detector (VAD) and a noise reduction capability. The input signal is subjected to LPC analysis and the prediction residual is separated into a slowly evolving waveform (SEW) and a rapidly evolving waveform (REW) components. The SEW magnitude component is quantized using a hierarchical predictive vector quantization approach. The REW magnitude is quantized using a gain and a sub-band based shape. SEW and REW phases are derived at the decoder using a phase model, based on a transmitted measure of voice periodicity. The spectral (LSP) parameters are quantized using a combination of scalar and vector quantizers. The 4.0 kbits/s coder has an algorithmic delay of 60 ms and an estimated floating point complexity of 21.5 MIPS. The performance of this coder has been evaluated using in-house MOS tests under various conditions such as background noise. channel errors, self-tandem. and DTX mode of operation, and has been shown to be statistically equivalent to ITU-T (3.729 8 kbps codec across all conditions tested.

    标签: frequency-domain interpolation performance Design kbit_s speech coder based and of

    上传时间: 2018-04-08

    上传用户:kilohorse

  • 道理特分解法

    #include "iostream" using namespace std; class Matrix { private: double** A; //矩阵A double *b; //向量b public: int size; Matrix(int ); ~Matrix(); friend double* Dooli(Matrix& ); void Input(); void Disp(); }; Matrix::Matrix(int x) { size=x; //为向量b分配空间并初始化为0 b=new double [x]; for(int j=0;j<x;j++) b[j]=0; //为向量A分配空间并初始化为0 A=new double* [x]; for(int i=0;i<x;i++) A[i]=new double [x]; for(int m=0;m<x;m++) for(int n=0;n<x;n++) A[m][n]=0; } Matrix::~Matrix() { cout<<"正在析构中~~~~"<<endl; delete b; for(int i=0;i<size;i++) delete A[i]; delete A; } void Matrix::Disp() { for(int i=0;i<size;i++) { for(int j=0;j<size;j++) cout<<A[i][j]<<" "; cout<<endl; } } void Matrix::Input() { cout<<"请输入A:"<<endl; for(int i=0;i<size;i++) for(int j=0;j<size;j++){ cout<<"第"<<i+1<<"行"<<"第"<<j+1<<"列:"<<endl; cin>>A[i][j]; } cout<<"请输入b:"<<endl; for(int j=0;j<size;j++){ cout<<"第"<<j+1<<"个:"<<endl; cin>>b[j]; } } double* Dooli(Matrix& A) { double *Xn=new double [A.size]; Matrix L(A.size),U(A.size); //分别求得U,L的第一行与第一列 for(int i=0;i<A.size;i++) U.A[0][i]=A.A[0][i]; for(int j=1;j<A.size;j++) L.A[j][0]=A.A[j][0]/U.A[0][0]; //分别求得U,L的第r行,第r列 double temp1=0,temp2=0; for(int r=1;r<A.size;r++){ //U for(int i=r;i<A.size;i++){ for(int k=0;k<r-1;k++) temp1=temp1+L.A[r][k]*U.A[k][i]; U.A[r][i]=A.A[r][i]-temp1; } //L for(int i=r+1;i<A.size;i++){ for(int k=0;k<r-1;k++) temp2=temp2+L.A[i][k]*U.A[k][r]; L.A[i][r]=(A.A[i][r]-temp2)/U.A[r][r]; } } cout<<"计算U得:"<<endl; U.Disp(); cout<<"计算L的:"<<endl; L.Disp(); double *Y=new double [A.size]; Y[0]=A.b[0]; for(int i=1;i<A.size;i++ ){ double temp3=0; for(int k=0;k<i-1;k++) temp3=temp3+L.A[i][k]*Y[k]; Y[i]=A.b[i]-temp3; } Xn[A.size-1]=Y[A.size-1]/U.A[A.size-1][A.size-1]; for(int i=A.size-1;i>=0;i--){ double temp4=0; for(int k=i+1;k<A.size;k++) temp4=temp4+U.A[i][k]*Xn[k]; Xn[i]=(Y[i]-temp4)/U.A[i][i]; } return Xn; } int main() { Matrix B(4); B.Input(); double *X; X=Dooli(B); cout<<"~~~~解得:"<<endl; for(int i=0;i<B.size;i++) cout<<"X["<<i<<"]:"<<X[i]<<" "; cout<<endl<<"呵呵呵呵呵"; return 0; } 

    标签: 道理特分解法

    上传时间: 2018-05-20

    上传用户:Aa123456789

  • 计算器程序

    简单实现计算器应用的java程序,其中包括.class文件,.java文件

    标签: 计算器 程序

    上传时间: 2018-10-30

    上传用户:123yyy

  • c++从入门到精通.pdf电子书 第二版

    我们编写的程序由两个主要方面组成 1 算法的集合就是将指令组织成程序来解决某个特定的问题 2 数据的集合算法在这些数据上操作以提供问题的解决方案 纵观短暂的计算机发展史这两个主要方面算法和数据一直保持不变发展演化的 是它们之间的关系就是所谓的程序设计方法programming paradigm 在过程化程序设计方法procedural programming 中一个问题可直接由一组算法来建 立模型例如公共图书馆的资料借阅/登记check out/check in 系统是由一系列过程表现 出来的其中两个主要的过程是资料的借阅和登记这些数据被独立存储起来我们既可以 在某个全局位置上访问这些数据或者把数据传递给过程以便它能够访问这些数据Fortran C 和 Pascal 是三种著名的过程语言C++也支持过程化程序设计单独的过程如check_in() check_out() over_due() fine()等等都被称为函数第三篇将集中讨论C++对过程化程序 设计方法的支持尤其将重点讨论函数函数模板和通用算法 在20 世纪70 年代程序设计的焦点从过程化程序设计方法转移到了抽象数据类型 abstract data type 简写为ADT 的程序设计上现在通常称之为基于对象(object based 的程序设计在基于对象的程序设计方法中我们通过一组数据抽象来建立问题的模型在 C++中我们把这些抽象称为类class 例如在这种方法下图书馆资料借阅登记系统就 由类的对象实例比如书借阅者还书时间罚款等之间的相互作用表现出来以此表 示出图书馆的抽象概念与每个类相关的算法被称为该类的公有接口public interface 数 据以私有形式被存储在每个对象中对数据的访问应与一般的程序代码隔离开来CLU Ada 和Modula-2 是三种支持抽象数据类型的程序设计语言第四篇将说明和讨论C++对抽象数据 类型程序设计方法的支持 面向对象的程序设计方法通过继承inheritance 机制和动态绑定dynamic binding 机 制扩展了抽象数据类型继承机制是对现有实现代码的重用动态绑定是指对现有的公有接 口的重用以前独立的类型现在有了类型/子类型的特定关系一本书一盒录像带一段录 音甚至孩子的宠物尽管它们有各自的借阅/登记方式但都可以成为图书馆的收藏资料 共享的公有接口和私有的数据都放在一个抽象类图书馆资料LibraryMaterial 中每个特 殊的图书馆资料类都从LibraryMaterial 抽象类继承共享的行为它们只需要提供与自身行为相 关的算法和数据Simula Smalltalk 和Java 是三种支持面向对象程序设计方法的著名语言 第五篇将集中讨论C++对面向对象程序设计方法的支持 C++是一种支持多种程序设计方法的语言虽然我们主要把它当作面向对象的语言但 实际上它也提供对过程化的和基于对象的程序设计方法的支持这样做的好处是对每个问题 都能够提供最合适的解决方案事实上没有一种程序设计方法能够

    标签: c++从入门到精通.pdf电子书 第二版

    上传时间: 2019-01-30

    上传用户:jizhi111