PDF:

Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ
phát triển C/C++ của Eclipse
Tạo một ứng dụng C++ sử dụng Thư viện khuôn mẫu chuẩn và CDT
Michael Galpin
Kiến trúc sư phần mềm
Ludi Labs
08 01 2010
Khi hầu hết mọi người nghĩ tới "Eclipse", họ đều nghĩ rằng đó là "Môi trường phát triển tích hợp
cho Java™ (Java IDE)." Eclipse có nhiều hơn thế. Với các trình cắm thêm thích hợp, người ta
có thể sử dụng Eclipse để làm việc với PHP, Ruby và Groovy, C và C++. Trong bài này, bạn bắt
đầu với Bộ công cụ phát triển C/C++ của Eclipse (CDT - Eclipse C/C++ Development Toolkit).
Chúng ta xây dựng một ứng dụng đơn giản trong C++, sử dụng CDT và Thư viện khuôn mẫu
chuẩn C++ (STL - C++ Standard Template Library) để tổ chức tốt hơn quá trình và tận dụng lợi
thế của một số các tính năng mạnh của C++.
Bài viết này, tiếp theo bài "Phát triển C/C++ với Nền tảng Eclipse ((C/C++ development with the
Eclipse Platform), dành cho các nhà phát triển C++ những người muốn học cách phát triển C++
bằng cách sử dụng Eclipse CDT. Một ứng dụng C++ đơn giản được phát triển trong bài viết này.
Ứng dụng này sử dụng STL C++. Độc giả cần quen thuộc với STL, cũng như với các nguyên tắc lập
trình hướng đối tượng cơ bản như sự thừa kế và đa hình. Hiểu rõ về Eclipse sẽ rất có ích, nhưng
không bắt buộc.
Trước khi chúng ta bắt đầu
Bạn cần phải cài đặt các phần mềm sau:
Eclipse
Chúng ta sẽ sử dụng CDT, đây là một trình cắm thêm cho Eclipse, do đó, tất nhiên bạn cần có
Eclipse. Bài này sử dụng Eclipse V3.2.
Môi trường thời gian chạy Java (JRE-Java Runtime Environment)
Chúng ta sắp xây dựng một ứng dụng C++, nhưng chúng ta đang sử dụng Eclipse. Eclipse tự
nó là một ứng dụng Java, vì vậy nó cần một JRE. Bài này sử dụng Eclipse V3.2, đòi hỏi một
phiên bản JRE V1.4 hoặc cao hơn. Nếu bạn cũng muốn sử dụng Eclipse cho việc phát triển
Java, bạn sẽ cần một JDK.
© Copyright IBM Corporation 2010
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Nhẫn hiệu đăng ký
Trang 1 của 27
developerWorks®
ibm.com/developerWorks/vn/
Bộ công cụ phát triển C/C++ (CDT) của Eclipse (Eclipse C/C++ Development Toolkit - CDT)
Đây là bài viết về CDT, vì vậy bạn sẽ cần đến nó, tất nhiên là thế. Hãy đọc một bài viết của
developerWorks vào năm 2003 có tiêu đề "Phát triển C/C++ với Nền tảng Eclipse." về các
hướng dẫn cài đặt CDT trong các phiên bản sớm hơn của Eclipse.
Cygwin
Nếu bạn đang sử dụng Microsoft Windows®, bạn sẽ thấy Cygwin — nó cung cấp một môi
trường giống như Linux® trên Windows — có ích đấy.
Các công cụ phát triển C/C++ của GNU (GNU C/C++ Development Tools)
CDT sử dụng các công cụ GNU C/C++ tiêu chuẩn để biên dịch mã của bạn, xây dựng dự án
của bạn và gỡ rối các ứng dụng. Các công cụ này là Bộ trình biên dịch của GNU (GCC - GNU
Compiler Collection) cho C++ (hay g++), tiện ích make, và Trình gỡ rối dự án GNU (GDBGNU Project Debugger). Nếu bạn là một lập trình viên sử dụng Linux hay Mac OS X, thì có
nhiều khả năng là các công cụ này đã được cài đặt trên máy tính của bạn. Bài viết này có các
chỉ dẫn để cài đặt các công cụ này cho Windows.
Eclipse CDT
Eclipse CDT là một trình cắm thêm vào Eclipse, biến Eclipse thành một C/C++ IDE mạnh. Nó được
thiết kế để mang lại nhiều tính năng tuyệt vời, nhờ các nhà phát triển Java mà Eclipse có được các
tính năng tuyệt đó cho các nhà phát triển C/C++, chẳng hạn như quản lý dự án, gỡ rối tích hợp,
các trình thủ thuật lớp, việc xây dựng được tự động hóa, tô màu theo cú pháp và tự hoàn tất mã
lệnh. Khi Eclipse được sử dụng như một Java IDE, nó sử dụng và tích hợp với JDK. Tương tự như
thế, CDT sử dụng và tích hợp với các công cụ C/C++ tiêu chuẩn, như g++, tiện ích make, và GDB.
Điều này đã làm cho nó trở nên rất phổ biến trên Linux, ở đó các công cụ này đã có sẵn và được sử
dụng cho hầu hết việc phát triển C++. CDT có thể được cài đặt trên Windows để sử dụng cùng các
công cụ đó. Cũng đang có một nỗ lực để làm cho CDT làm việc với các công cụ C++ của Microsoft,
làm cho nó thậm chí hấp dẫn hơn cho các nhà phát triển C++ trên Windows.
Cài đặt CDT
Chúng tôi bắt đầu với giả định là bạn đã cài đặt Eclipse và có thể chạy nó. Nếu không, hãy tham
khảo trang web của Eclipse để cài đặt và chạy. Ta hãy cài đặt CDT. CDT là một trình cắm thêm cho
Eclipse, do đó, nó sử dụng tính năng Cập nhật phần mềm của Eclipse (Eclipse's Software Updates).
Chọn Help > Software Updates > Find and Install.
Hình 1. Cập nhật phần mềm Eclipse
Tiếp theo, bạn sẽ muốn chọn Search để tìm các tính năng mới để cài đặt.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 2 của 27
ibm.com/developerWorks/vn/
developerWorks®
Hình 2. Tìm kiếm các tính năng mới
Nếu bạn đang sử dụng một phiên bản mới hơn của Eclipse, nên có các trang khám phá Callisto
hoặc Europa. (Chú ý của biên tập viên: Do bài này đã được viết vào tháng 4 năm 2007, bản phát
hành Europa còn đang ở giai đoạn lập kế hoạch. Tuy nhiên, việc cài đặt bản Europa được dự kiến
tương tự như Callisto.) Chỉ cần chọn nó và nhấn vào Finish.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 3 của 27
developerWorks®
ibm.com/developerWorks/vn/
Hình 3. Trang Web khám phá Callisto
Eclipse có thể yêu cầu bạn chọn trong một danh sách các trang Web nhân bản để đi đến Trang
khám phá Callisto (Discovery Callisto Site). Chọn bất kỳ một trang nào có vẻ gần bạn nhất. Bạn sẽ
thấy một danh sách các trình cắm thêm từ Trang khám phá Callisto. Bạn sẽ muốn chọn C and C++
Development (Phát triển C và C++) và nhấn Next.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 4 của 27
ibm.com/developerWorks/vn/
developerWorks®
Hình 4. Các trình cắm thêm Callisto có sẵn
Hình 4. Các trình cắm thêm Callisto có sẵn Next. Bạn sẽ thấy một bản tóm tắt những gì sẽ được tải
về và cài đặt. Đơn giản là nhấn vào Finish.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 5 của 27
developerWorks®
ibm.com/developerWorks/vn/
Hình 5. Bản tóm tắt tải về và cài đặt
Trình quản lý cập nhật (Update Manager) của Eclipse sau đó sẽ tải về trình cắm thêm CDT từ máy
chủ Web nhân bản mà bạn đã chọn trước đó. CDT có tổng dung lượng khoảng 11 MB, do đó, có
thể mất vài phút để tải về, tùy thuộc vào tốc độ kết nối Internet của bạn. Sau khi mọi thứ được tải
về, bạn sẽ được yêu cầu xác nhận rằng bạn muốn cài đặt các tính năng mới. Nhấn vào Install All
(Cài đặt tất cả).
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 6 của 27
ibm.com/developerWorks/vn/
developerWorks®
Hình 6. Xác nhận cài đặt
Sau khi kết thúc việc cài đặt CDT, bạn sẽ được yêu cầu khởi động lại Eclipse. Hãy tiếp tục và khởi
động lại. Sau khi khởi động lại Eclipse, CDT sẽ sẵn sàng hoạt động.
Cấu hình Windows
Nếu bạn đang chạy Eclipse trên Linux hoặc Mac OS X, bạn đã sẵn sàng bắt đầu sử dụng CDT
để phát triển một ứng dụng C++. Nếu bạn đang trong Windows, có thể cần thêm một vài bước
nữa. Như đã đề cập, CDT dựa trên các công cụ phát triển GNU C++ chuẩn: g++, make, và GDB.
Các công cụ phát triển này thường có trên Linux hoặc Mac OS X. Chúng thường không có trên
Windows. Nhưng đừng lo. Các công cụ này có thể dễ dàng được cài đặt trên Windows. Có lẽ cách
dễ nhất là cài đặt Cygwin. Cygwin cung cấp môi trường giống như Linux trên Windows (xem Tài
nguyên). Khi cài đặt Cygwin, bạn sẽ được yêu cầu chọn những gói bạn muốn cài đặt. Hãy chắc chắn
rằng đã đi tới phần phát triển và chọn gcc: g++, make, và GDB. Điều này cũng sẽ làm cho các thứ
cần có trước của chúng được cài đặt.
Một khi bạn đã hoàn thành việc cài đặt Cygwin, bạn sẽ cần phải thêm g++, make, và GDB vào
đường dẫn của bạn. Cách dễ nhất để làm điều này là thêm thư mục bin của Cygwin vào đường dẫn
của bạn, vì đó là nơi có thể tìm thấy g++, make, và GDB. Khi đã làm xong, khởi động lại Eclipse.
Chơi xổ số
Tại thời điểm này, chúng ta đã sẵn sàng để bắt đầu phát triển các ứng dụng của chúng ta với CDT.
Chúng ta hãy tạm dừng lại để nêu ra chúng ta muốn phát triển những gì. Ứng dụng mẫu là một
chương trình dòng lệnh đơn giản để sinh ra các xổ số. Có nhiều bang có xổ số và các quy tắc khá
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 7 của 27
developerWorks®
ibm.com/developerWorks/vn/
khác nhau. Chúng ta sẽ cho phép người dùng lựa chọn họ muốn tạo ra xổ số của bang nào. Điều
này sẽ cung cấp cho chúng ta một cách thích hợp để sử dụng sự hỗ trợ hành vi đa hình của C++.
Tạo dự án
Eclipse sử dụng các khái niệm các phối cảnh để cho phép nhiều trình cắm thêm tuỳ chỉnh các lệnh
và các khung nhìn của chúng. Eclipse khởi đầu theo mặc định trong phối cảnh Java. CDT bao
gồm phối cảnh riêng của nó, vì vậy chúng ta sẽ muốn chuyển sang đó. Để làm điều này, hãy chọn
Window > Open Perspective > Other. Bạn sẽ thấy một danh sách các phối cảnh có sẵn cho bạn.
Chọn phối cảnh C/C++ và nhấn OK.
Hình 7. Chọn phối cảnh C/C++
Bây giờ Eclipse trông giống như Hình 8.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 8 của 27
ibm.com/developerWorks/vn/
developerWorks®
Hình 8. Phối cảnh C/C++
Eclipse tổ chức mã của bạn thành các dự án, do đó, chúng ta sẽ muốn tạo một dự án mới. Chọn
File > New > Managed Make C++ Project.
Hình 9. Dự án C++ mới
Bạn có thể đã thấy có một vài tùy chọn khác nhau cho dự án. Chúng ta muốn có một dự án C++.
Chúng ta chọn "Managed Make" (tiện ích Make được quản lý), bởi vì điều này sẽ cho phép Eclipse
tạo ra các tệp make cho chúng ta. Bạn có thể chọn một hương vị "Standard Make" (Make tiêu
chuẩn) và viết tệp make riêng của bạn. Bây giờ, chúng ta đang ở trong Trình thủ thuật New Project,
ở đây ta sẽ đặt tên dự án của mình là Lottery (Xổ số) và nhấn vào Finish.
Thao tác này sẽ tạo ra một dự án rỗng, bạn sẽ thấy dự án này trong cửa sổ C/C++ Projects (Các
dự án C/C++). Nhấn chuột phải vào dự án đó và chọn New > Source Folder. Điều này sẽ làm xuất
hiện một trình thủ thuật "New Source Folder" (Thư mục Nguồn mới), ở đây chúng ta sẽ đặt tên thư
mục của mình là src và nhấn Finish.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 9 của 27
developerWorks®
ibm.com/developerWorks/vn/
Chương trình xổ số cơ bản
Chúng ta đã sẵn sàng bắt đầu tạo ra một số mã. Chúng ta sẽ bắt đầu bằng việc tạo ra tệp chạy thi
hành của ứng dụng của chúng ta. Nhấn chuột phải vào thư mục nguồn mà chúng ta vừa tạo và chọn
New > Source File, như trong Hình 10.
Bây giờ, ta hãy tạo ra một phương thức main rỗng. Đây chỉ là cái giữ chỗ (placeholder); chúng ta sẽ
thêm nhiều thứ vào đó sau khi đã tạo ra phần còn lại của dự án của mình.
int main()
{
return 0;
}
Lưu dự án của bạn và Eclipse sẽ tự động thực hiện nó cho bạn. Bạn sẽ thấy một số kết quả trong
bàn điều khiển báo hiệu rằng nó được biên dịch thành công.
Chúng ta đã sẵn sàng để tạo ra lớp đầu tiên của mình. Nhấn chuột phải vào thư mục mã nguồn mà
chúng ta vừa tạo và chọn New > Class.
Hình 10. Lớp mới
Việc này làm xuất hiện trình thủ thuật New Class (Lớp mới). Chúng ta sẽ gán cho lớp của mình một
vùng tên là lotto, và chúng ta sẽ gọi lớp của mình là Lottery.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 10 của 27
ibm.com/developerWorks/vn/
developerWorks®
Hình 11. Lớp Lottery
Eclipse sẽ tạo ra các gốc cho lớp của bạn. CDT làm được rất nhiều điều tốt đẹp cho bạn. Nó tạo
ra các chỉ thị biên dịch thích hợp trong tệp tiêu đề (header file). Nó khuyến khích các cách thực
hành tốt nhất bằng cách tạo ra riêng biệt tệp giao diện (Lottery.h) và tệp triển khai thực hiện
(Lottery.cpp). Nó còn khuyến khích một cách thực hành tốt khác là để cho phương thức hủy
(destructor) của lớp của bạn là ảo. Chúng ta có thể nhập mã nguồn cho các lớp này như trong Liệt
kê 1 và 2.
Liệt kê 1. Lottery.h
#ifndef LOTTERY_H_
#define LOTTERY_H_
#include <string>
#include <sstream>
#include <cstdlib>
#include <time.h>
using namespace std;
namespace lotto
{
class Lottery
{
protected:
int ticketSize, maxNum;
int* generateNumbers();
public:
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 11 của 27
developerWorks®
ibm.com/developerWorks/vn/
Lottery(int,int);
virtual ~Lottery();
virtual string printTicket();
};
}
#endif /*LOTTERY_H_*/
Liệt kê 2 cho thấy tệp triển khai thực hiện của lớp Lottery.
Liệt kê 2. Lottery.cpp
#include "Lottery.h"
namespace lotto
{
Lottery::Lottery(int size, int num)
{
this->ticketSize = size;
this->maxNum = num;
}
Lottery::~Lottery()
{
}
int* Lottery::generateNumbers()
{
int* allNums = new int[this->maxNum +1];
for (int i=0; i <= this->maxNum ; i++)
{
allNums[i] = 0;
}
int* nums = new int[this->ticketSize];
for (int i=0; i < this->ticketSize; i++)
{
int val = 1 + rand() % (this->maxNum);
if (allNums[val])
{
i--;
}
else
{
nums[i] = val;
allNums[val] =1;
}
}
return nums;
}
string Lottery::printTicket()
{
ostringstream str;
int* nums = this->generateNumbers();
for (int i=0;i< this->ticketSize; i++)
{
str << *nums << ' ';
nums++;
}
return str.str();
}
}
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 12 của 27
ibm.com/developerWorks/vn/
developerWorks®
Mã này đang làm gì? Vâng, lớp Lottery của chúng ta có hai thuộc tính. Thuộc tính ticketSize là
số con số trên vé số. Thuộc tính maxNum là con số lớn nhất trên vé. Sau đây chúng ta sẽ sử dụng xổ
số của bang Florida làm một ví dụ. Ở đó, bạn chọn sáu số từ 1 đến 53, do đó ticketSize sẽ là 6 và
maxNum sẽ là 53.
Phương thức generateNumbers tạo ra một mảng các số tương ứng với các số trên một vé xổ số. Nó
sử dụng hàm STL rand() để tạo các số ngẫu nhiên. Mảng allNums được sử dụng để theo dõi các số
đã được tạo ra cho đến nay, do đó, chúng ta có thể chắc chắn rằng chúng ta không nhận được một
số trùng lặp trên vé của mình. Cuối cùng, printTicket() tạo ra một chuỗi ký tự biểu diễn vé số của
chúng ta.
Khi bạn lưu trữ các tệp này, Eclipse tự động xây dựng dự án của bạn. Một lần nữa, nếu bạn ghi lưu
dự án này, nó sẽ được biên dịch và bạn sẽ thấy các thông báo biên dịch trong bàn điều khiển, như
trong Liệt kê 3.
Liệt kê 3. Kết quả của trình biên dịch trong bàn điều khiển
**** Build of configuration Debug for project Lottery ****
make -k all
Building file: ../src/Main.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/Main.d" -MT"src/Main.d"
-o"src/Main.o" "../src/Main.cpp"
Finished building: ../src/Main.cpp
Building target: Lottery
Invoking: MacOS X C++ Linker
g++ -o "Lottery" ./src/Lottery.o ./src/Main.o
Finished building target: Lottery
Build complete for project Lottery
Lớp MegaLottery
Bạn có thể đã nhận thấy rằng chúng ta làm cho phương thức printTicket() là ảo khi nó được khai
báo trong tệp tiêu đề. Điều đó sẽ cho phép chúng ta tạo lớp con của Lottery và ghi đè lên phương
thức này. Chúng ta muốn làm điều đó bởi vì một số bang có một loại xổ số có một số "mega" (số
hàng triệu). Đây là một số được quay riêng mà vé số bất kỳ phải khớp với số đó ngoài các số khác
đã quay. Hãy tạo một lớp MegaLottery cho các bang này và nó sẽ là lớp con của Lottery.
Một lần nữa, nhấn chuột phải vào thư mục mã nguồn của chúng ta và chọn New > Class, như
chúng ta đã làm trước đó. Lúc này trong trình thủ thuật New Class, chúng ta sẽ khai báo lớp mới
của chúng ta trong cùng vùng tên, nhưng gọi nó là MegaLottery.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 13 của 27
developerWorks®
ibm.com/developerWorks/vn/
Hình 12. Lớp MegaLottery
Để tạo lớp con của Lottery, chọn nút Add bên cạnh phần Base Classes (Các lớp Cơ sở). Hộp
thoại Choose Base Class (Chọn lớp cơ sở) xuất hiện. Bạn có thể bắt đầu nhập tên của lớp cơ sở
và Eclipse sẽ thu hẹp nhanh chóng danh sách của các ứng cử viên lớp cơ sở. Bạn sẽ muốn chọn
Lottery và nhấn OK.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 14 của 27
ibm.com/developerWorks/vn/
developerWorks®
Hình 13. Chọn các lớp cơ sở
Chúng ta có thể nhập mã cho MegaLottery, như hiển thị trong Liệt kê 4 và 5.
Liệt kê 4. MegaLottery.h
#ifndef MEGALOTTERY_H_
#define MEGALOTTERY_H_
#include "Lottery.h"
using std::string;
namespace lotto
{
class MegaLottery : public lotto::Lottery
{
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 15 của 27
developerWorks®
ibm.com/developerWorks/vn/
protected:
int maxMegaNum;
public:
MegaLottery(int,int,int);
virtual ~MegaLottery();
string printTicket();
};
}
#endif /*MEGALOTTERY_H_*/
Liệt kê 5 hiển thị tệp triển khai thực hiện của lớp MegaLottery MegaLottery.
Liệt kê 5. MegaLottery.cpp
#include "MegaLottery.h"
using namespace std;
namespace lotto
{
MegaLottery::MegaLottery(int ticketSize, int maxNum, int maxMegaNum) :
Lottery(ticketSize,maxNum)
{
this->maxMegaNum = maxMegaNum;
}
MegaLottery::~MegaLottery()
{
}
string MegaLottery::printTicket()
{
ostringstream tick;
tick << Lottery::printTicket() << " Mega: ";
int mega = 1 + rand() % this->maxMegaNum;
tick << mega;
return tick.str();
}
}
Sự khác biệt chính giữa Lottery và MegaLottery là MegaLottery có một thuộc tính bổ sung
thêm maxMegaNum. Đây là giá trị tối đa mà số mega có thể nhận. Nó sẽ ghi đè phương thức
printTicket(). Nó sử dụng lớp cơ sở để tạo ra phần đầu tiên của vé số, sau đó nó tạo ra số mega
và gắn thêm nó vào chuỗi ký tự biểu diễn vé số.
Chúng ta cần một cách để tạo ra các loại xổ số khác nhau. Chúng ta sẽ sử dụng một lớp Factory
Pattern (Mẫu nhà máy) để làm việc này. Chúng ta sẽ làm điều này bằng cách thêm một lớp
LotteryFactory. Chúng ta muốn tất cả Lotteries đều đến từ cùng một nhà máy, do đó, chúng ta
sẽ làm cho LotteryFactory là cá thể duy nhất (singleton). Mã cho nó có trong Liệt kê 6 và 7.
Liệt kê 6. #ifndef LOTTERYFACTORY_H_
#define LOTTERYFACTORY_H_
#include "Lottery.h"
namespace lotto
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 16 của 27
ibm.com/developerWorks/vn/
developerWorks®
{
class LotteryFactory
{
public:
enum State { California, Florida };
static LotteryFactory* getInstance();
Lottery* getLottery(State);
private:
LotteryFactory();
};
}
#endif /*LOTTERYFACTORY_H_*/
Liệt kê 7 cho thấy tệp triển khai thực hiện lớp LotteryFactory.
Liệt kê 7. LotteryFactory.cpp
#include "LotteryFactory.h"
#include "MegaLottery.h"
namespace lotto
{
LotteryFactory::LotteryFactory()
{
srand(time(NULL));
}
Lottery* LotteryFactory::getLottery(State s)
{
if (s == LotteryFactory::California)
{
Lottery* lotto = new MegaLottery(5,47,27);
return lotto;
}
else
{
Lottery* lotto = new Lottery(6,53);
return lotto;
}
}
LotteryFactory* LotteryFactory::getInstance()
{
static LotteryFactory instance;
return &instance;
}
}
này có một bảng kê (enum) các kiểu xổ số khác nhau. Chúng ta đã chỉ đưa vào
Florida và California trong ví dụ này, nhưng sẽ không khó khăn gì để đưa thêm vào bao nhiêu tùy ý
bạn. Hàm tạo (constructor) của LotteryFactory tạo mầm hàm rand() mà các lớp lottery của chúng
ta sử dụng. Chúng ta chỉ cần thực hiện phương thức main có thể chạy được của chúng ta.
LotteryFactory
Liệt kê 8. Main.cpp
#include <iostream>
#include "LotteryFactory.h"
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 17 của 27
developerWorks®
ibm.com/developerWorks/vn/
using namespace lotto;
int main()
{
LotteryFactory* factory = LotteryFactory::getInstance();
cout << "What lottery do you want to play?" << endl;
cout << "(1) California, (2) Florida" << endl;
int cmd;
scanf("%d", &cmd);
Lottery* lotto = 0;
switch (cmd)
{
case 1 :
lotto = factory->getLottery(LotteryFactory::California);
break;
case 2 :
lotto = factory->getLottery(LotteryFactory::Florida);
break;
default :
cout << "Sorry didn't understand that" << endl;
}
cout << "Ticket: " << lotto->printTicket() << endl;
delete lotto;
return 0;
}
Chạy chương trình
Chúng ta đã sẵn sàng để chạy chương trình của mình. Chọn Run > Run.
Hình 14. Chọn các lớp cơ sở
Chọn C/C++ Local Application (Ứng dụng cục bộ C/C++) và nhấn vào nút New.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 18 của 27
ibm.com/developerWorks/vn/
developerWorks®
Hình 15. Lược thảo chạy C/C++ mới
Thao tác này sẽ làm xuất hiện giao diện Create run configuration (Tạo cấu hình chạy) cho dự án
Lottery. Bạn sẽ cần phải lựa chọn thực hiện nó bằng cách nhấn vào nút Search Project (Tìm kiếm
dự án).
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 19 của 27
developerWorks®
ibm.com/developerWorks/vn/
Hình 16. Tìm kiếm dự án để thực hiện
Bạn có thể chọn tệp nhị phân mà Eclipse đã tạo cho bạn và nhấn OK.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 20 của 27
ibm.com/developerWorks/vn/
developerWorks®
Hình 17. Tìm kiếm dự án để thực hiện
Chỉ cần nhấn vào Run (Chạy) và chương trình sẽ chạy trong bàn điều khiển của bạn. Đoạn mã dưới
đây cho thấy một số ví dụ kết quả đầu ra.
What lottery do you want to play?
(1) California, (2) Florida
2
Ticket: 12 28 24 15 35 22
Gỡ rối chương trình
Chương trình của chúng ta sẽ chạy tốt, nhưng chúng ta hãy xem xét việc gỡ rối ứng dụng. Đầu tiên,
tạo một điểm dừng (breakpoint) trong mã của chúng ta. Chọn một dòng và nhấn chuột phải bên
cạnh nó và chọn Toggle Breakpoint (Bật/tắt điểm dừng).
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 21 của 27
developerWorks®
ibm.com/developerWorks/vn/
Hình 18. Tạo điểm dừng
Chúng ta cần phải tạo một cấu hình gỡ rối, phần lớn giống như chúng ta đã tạo một cấu hình chạy.
Chọn Run > Debug.
Hình 19. Tạo cấu hình gỡ rối
Thao tác này sẽ làm xuất hiện Debug configuration (Cấu hình gỡ rối). Việc này dựa trên cấu hình
Run và bạn sẽ không cần phải thay đổi bất cứ điều gì. Chỉ cần nhấn Debug.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 22 của 27
ibm.com/developerWorks/vn/
developerWorks®
Hình 20. Cấu hình Debug
Sau khi trình gỡ rối khởi chạy, nó sẽ nhắc bạn chuyển sang phối cảnh Debugger (Trình gỡ rối). Hãy
làm như vậy. Lưu ý là trong cấu hình này chúng ta thiết lập để dừng tự động lúc khởi động phương
thức main của chúng ta. Do đó, trình gỡ lỗi sẽ dừng ngay lập tức và bạn sẽ thấy một màn hình giống
Hình 21.
Hình 21. Trình gỡ rối
Tóm tắt
Chúng ta đã xây dựng và đã gỡ rối ứng dụng xổ số của chúng ta. Bạn có thể dễ dàng thêm nhiều
chương trình xổ số cho nó. Một số trong chúng có thể liên quan đến các lớp con bổ sung thêm.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 23 của 27
developerWorks®
ibm.com/developerWorks/vn/
CDT làm cho nó dễ dàng hơn bao giờ hết khi tạo ra các lớp này và các hệ thống phân cấp lớp và
chạy và gỡ rối ứng dụng nhằm thử nghiệm nó.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 24 của 27
ibm.com/developerWorks/vn/
developerWorks®
Tài nguyên
Học tập
• Nhận được một tổng quan về CDT trong "Phát triển C/C++ với Nền tảng Eclipse."
• Xem một đoạn video về cài đặt Eclipse và CDT trong chương trình trình diễn Eclipse và C/C+
+ của developerWorks.
• Đi sâu vào kiến trúc của CDT trong loạt bài gồm năm phần có tiêu đề "Xây dựng một trình
soạn thảo dựa trên CDT."
• Các nhà phát triển Windows có thể tìm hiểu về việc di chuyển sang CDT trong "Di chuyển các
dự án Visual Studio C và C++ sang CDT Eclipse."
• Các nhà phát triển Windows cũng có thể xem dự án CDT-MSVC, một dự án để kết hợp trình
biên dịch và trình gỡ rối của Microsoft với CDT.
• Tìm hiểu thêm về trình gỡ rối CDT trong Hướng dẫn gỡ rối CDT.
• Nhận thêm thông tin giới thiệu về CDT trong Phát triển C++ khi sử dụng Eclipse — hướng dẫn
các trình khởi động IDE.
• Xem "danh sách khuyến khích đọc Eclipse."
• Duyệt tất cả nội dung Eclipse trên developerWorks.
• Những người sử dụng mới bắt đầu với Eclipse nên đọc Bắt đầu tài nguyên dự án Eclipse ở
đây.
• Mở rộng các kỹ năng Eclipse của bạn bằng cách xem nguồn tài nguyên dự án Eclipse trên
developerWorks IBM.
• Để nghe các cuộc phỏng vấn và thảo luận thú vị dành cho các nhà phát triển phần mềm, hãy
xem developerWorks podcasts.
• Để đọc bài giới thiệu về nền tảng Eclipse, hãy xem "Khởi đầu với Nền tảng Eclipse."
• Theo sát các sự kiện kỹ thuật và webcast của developerWorks.
• Xem và tìm hiểu về IBM và các công nghệ mã nguồn mở và các chức năng sản phẩm với các
trình diễn theo yêu cầu của developerWorks miễn phí.
• Theo dõi các hội nghị, các triển lãm thương mại, webcast sắp tới và các sự kiện khác trên thế
giới mà các nhà phát triển nguồn mở của IBM đang quan tâm.
• Truy cập vào vùng mã nguồn mở của developerWorks để tìm các thông tin hướng dẫn rộng
lớn, các công cụ và các cập nhật dự án để giúp bạn phát triển với các công nghệ mã nguồn
mở và sử dụng chúng với các sản phẩm của IBM.
Lấy sản phẩm và công nghệ
• Tìm hiểu về các công cụ MinGW, GNU C /C++ cho Windows kèm theo với Cygwin.
• Tải về Cygwin một môi trường giống như Linux cho Windows. Nó bao gồm hai phần: Một DLL
hoạt động như một tầng mô phỏng Linux API cung cấp chức năng Linux API quan trọng và
một bộ sưu tập các công cụ mang lại dáng vẻ và cảm nhận của Linux.
• Thông tin tải Bộ công cụ phát triển Eclipse C/C++ (CDT) có nhiều thông tin mới nhất về các
phiên bản CDT có sẵn.
• Xem các bản tải về công nghệ Eclipse mới nhất ở alphaWorks của IBM.
• Tải về các phiên bản đánh giá sản phẩm của IBM, và thực hành các các công cụ phát triển
ứng dụng của bạn và các sản phẩm phần mềm trung gian từ DB2®, Lotus®, Rational®,
Tivoli®, và WebSphere®.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 25 của 27
developerWorks®
ibm.com/developerWorks/vn/
• Đổi mới dự án phát triển nguồn mở tiếp theo của của bạn với phần mềm dùng thử của IBM, có
sẵn để tải xuống hoặc trên đĩa DVD.
Thảo luận
• Doug Schaefer là nhà phát triển hàng đầu về CDT. Đọc Doug trên Eclipse CDT để có các tin
tức mới nhất về CDT.
• Các nhóm tin Eclipse Platform là nơi dừng chân đầu tiên của bạn để thảo luận các câu hỏi về
Eclipse. (Chọn lựa này sẽ khởi chạy ứng dụng trình đọc tin Usenet mặc định của bạn và mở
eclipse.platform.)
• Các nhóm tin Eclipse có nhiều tài nguyên cho những người quan tâm đến việc sử dụng và mở
rộng Eclipse.
• Tham gia vào các blog developerWorks và dành hết tâm trí cho cộng đồng developerWorks.
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 26 của 27
ibm.com/developerWorks/vn/
developerWorks®
Đôi nét về tác giả
Michael Galpin
Michael Galpin đã phát triển phần mềm Java một cách chuyên nghiệp từ năm 1998.
Ông hiện đang làm việc cho eBay. Ông đã có bằng về toán học của Viện Công nghệ
California.
© Copyright IBM Corporation 2010
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
Phát triển các ứng dụng bằng cách sử dụng Bộ công cụ phát triển
C/C++ của Eclipse
Trang 27 của 27