C++ 入門指南 - 實作與測試

當規劃完 Encrypt 類別 (class) 後,接著就進入實作 (implementation) 與測試 (test) 的階段,實作就是實際寫出程式碼,測試就是編譯執行看看結果是否符合預期囉




我們先來看看 Encrypt 的建構子 (constructor) ,這部份很單純
Encrypt::Encrypt() {
    setoArray();
    setcArray();    
}


Encrypt 的建構子就是呼叫 setoArray()setcArray() ,建立兩個成員變數 (member variable) oArraycArray


oArray 為按字母順序的英文小寫字母,我們提供的 setoArray() 如下
void Encrypt::setoArray() {
    string s;
    char c = 'a';
    int i;
    for (i = 0; i < N; i++) {
        s += c++;
    }
    
    oArray = s;
}


由於 cchar 型態 (type) ,初值為 'a' ,我們把初值為 'a' 的 c 加進 s 之中,之後 c 用遞增運算子遞增 1 變成 'b' ,再加進 s 之中,直到最後為 'z' 的 c 也加進 s 內後,迴圈 (loop) 才結束。


為什麼 string 型態的 s 可以直接用 += 的運算子 (operator) 增加元素 (element) 呢?這是因為 += 在 string 中經過重載 (overload) 改寫,因此可以這樣使用。


我們先給給初值建立 cArray() , a 給 3 , b 給 5 好了,其他就按照公式囉
void Encrypt::setcArray() {
    int a = 3;
    int b = 5;
    
    int x, y, m;
    char r;
    char c = 'a';
    string s;
    int i;
    for (i = 0; i < N; i++) {
        x = c;
        y = x * a + b;
        m = y % N;
        s += (char) m + DIFF; 
        c++; 
    }
    
    cArray = s;
}


因此包括 getoArray()getcArray() 的 Encrypt.cpp 如下
#include "Encrypt.h"

Encrypt::Encrypt() {
    setoArray();
    setcArray();    
}

void Encrypt::setoArray() {
    string s;
    char c = 'a';
    int i;
    for (i = 0; i < N; i++) {
        s += c++;
    }
    
    oArray = s;
}
    
void Encrypt::setcArray() {
    int a = 3;
    int b = 5;
    
    int x, y, m;
    char r;
    char c = 'a';
    string s;
    int i;
    for (i = 0; i < N; i++) {
        x = c;
        y = x * a + b;
        m = y % N;
        s += (char) m + DIFF; 
        c++; 
    }
    
    cArray = s;
}
    
string Encrypt::getoArray() {
    return oArray;
}
    
string Encrypt::getcArray() {
    return cArray;
}

string Encrypt::toEncode(string s) {}

string Encrypt::toDecode(string s) {}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:Encrypt.cpp
    功能:示範 C++ 程式 
    作者:張凱慶
    時間:西元 2012 年 10 月 */


雖然 toEncode()toDecode() 還沒寫出來,沒關係,先留空就可以了,我們先寫 EncryptDemo.cpp 來測試看看囉
#include <iostream>
using std::cout;
using std::endl;

#include "Encrypt.h"

int main()
{
    Encrypt encryptor;
    cout << endl;
    cout << encryptor.getcArray() << endl << endl;
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:EncryptDemo.cpp
    功能:示範 C++ 程式 
    作者:張凱慶
    時間:西元 2012 年 10 月 */


編譯執行結果如下



嗯,結果還不錯,不過我們希望可以有不同的密碼表,所以接下來要繼續測試囉!


中英文術語對照
類別class
實作implementation
測試test
建構子constructor
成員變數member variable
型態type
迴圈loop
運算子operator
元素element
重載overload


您可以繼續參考
軟體開發


相關目錄
回 C++ 入門指南
回 C++ 教材目錄
回首頁


參考資料
http://www.cplusplus.com/doc/tutorial/classes/
http://www.cplusplus.com/doc/tutorial/classes2/

沒有留言: