Template and Exception Template and Exception Bởi: Thanh Hiền Vũ TEMPLATE Trong phần này, chúng ta tìm hiểu về một trong các đặc tính còn lại của C++,

Tài liệu tương tự
Hàm và lớp template trong Lập trình hướng đối tượng Hàm và lớp template trong Lập trình hướng đối tượng Bởi: unknown Trong phần này, chúng ta tìm hiểu

Chương trình dịch

Trường ĐHBK Hà Nội Khoa Điện Bộ môn Điều khiển Tự động Tài liệu hướng dẫn thực hành: KĨ THUẬT LẬP TRÌNH C/C++ Bài 1: Lập trình cơ sở 1 Mục đích bài th

Bài 7. Con trỏ Mục tiêu: 1. Luyện tập sử dụng con trỏ và địa chỉ của các biến 2. Sử dụng con trỏ khi thao tác với mảng. Giới hạn: không dùng các thư v

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 5. Kiểu dữ liệu và biểu thức trong C Nội dung 1. Các ki

Lớp và đối tượng-các hàm và các lớp friend Lớp và đối tượng-các hàm và các lớp friend Bởi: Thanh Hiền Vũ CÁC HÀM VÀ CÁC LỚP friend Một hàm friend của

Những cơ sở của ngôn ngữ C# Những cơ sở của ngôn ngữ C# Bởi: phamvanviet truonglapvy Trong chương này sẽ trình bày về hệ thống kiểu trong C#; phân biệ

Microsoft Word - cau-truc-du-lieu-hang-doi.docx

Lập trình và ngôn ngữ lập trình

NGÔN NGƯ LÂ P TRIǸH Biên tập bởi: nguyenvanlinh

Array, Indexer và Collection Array, Indexer và Collection Bởi: phamvanviet truonglapvy Mảng (Array) Mảng là một tập hợp các phần tử có cùng kiểu, được

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 11. Mảng và xâu kí tự Nội dung 1. Mảng 2. Xâu kí tự 2 1

Câu lệnh (statement) Câu lệnh (statement) Bởi: Khuyet Danh Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu lệnh. Chương trình bao gồm nhiều câu

Chuỗi Chuỗi Bởi: phamvanviet truonglapvy Chuỗi (string) trong C# là một kiểu dựng sẵn như các kiểu int, long, có đầy đủ tính chất mềm dẻo, mạnh mẽ và

Microsoft Word - bo_tien_xu_ly_trong_c.docx

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 13. Hàm Nội dung 1. Khái niệm hàm 2. Khai báo và sử dụn

Danh sách tuyến tính kiểu hàng đợi Danh sách tuyến tính kiểu hàng đợi Bởi: Khoa CNTT ĐHSP KT Hưng Yên ĐỊNH NGHĨA Hàng đợi là một vật chứa (container)

Chương trình dịch

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG TIN HỌC ĐẠI CƯƠNG Bài 9. Vào ra dữ liệu trong C Các lệnh vào ra dữ liệu C cun

Tạp chí KHOA HỌC ĐHSP TPHCM Số 54 năm 2014 PHƯƠNG PHÁP SỬ DỤNG TRÒ CHƠI TRONG DẠY HỌC NGUYỄN THỊ BÍCH HỒNG * TÓM TẮT Bài viết trình bày phương pháp sử

Animation, Modules 6 - Hoạt hình, tách file

MỘT SỐ LƯU Ý KHI DẠY CÁC TIẾT ÔN TẬP CHƯƠNG Môn Tin học cung cấp cho học sinh những kiến thức phổ thông về ngành khoa học tin học, hình thành và phát

Ví dụ về duyệt đồ thị ưu tiên chiều sâu DFS và ứng dụng Đồ thị ví dụ: Nguyễn Hữu Tuân vimaru.edu.vn Hình 1: Đồ thị vô hướng có 8 đỉnh Với đồ thị trên,

Hệ điều hành Bài tập tuần 6 1 Quản lý bộ nhớ Bài tập 1 : Xem thông tin bộ nhớ 1. Sử dụng top, ps đọc thông tin về kích thước vùng nhớ của 1 tiến trình

Chiến lược kiểm thử Chiến lược kiểm thử Bởi: Khoa CNTT ĐHSP KT Hưng Yên Các công đoạn kiểm thử Quá trình kiểm thử có thể chia làm các giai đoạn : Kiểm

PowerPoint Presentation

Copyright vietjack.com Chuỗi (String) trong C# Trong C#, bạn có thể sử dụng các chuỗi (string) như là mảng các ký

Turner, K., D. Pearce, and I. Bateman Environmental Economics: An Elementary Introduction. Harvester Wheatsheaf Publisher. translated into Viet

SỞ GIÁO DỤC VÀ ĐÀO TẠO THÀNH PHỐ ĐÀ NẴNG TRƯỜNG THPT PHAN CHÂU TRINH ĐỀ CƯƠNG ÔN TẬP MÔN NGỮ VĂN LỚP 11 HỌC KÌ I NĂM HỌC A. CẤU TRÚC ĐỀ THI:

Tư tưởng đạo đức Nho giáo và ảnh hưởng của nó ở nước ta hiện nay NGUYỄN THỊ THANH MAI Tóm tắt: Nho giáo là một học thuyết chính trị - đạo đức ra đời v

TẬP ĐOÀN ĐIỆN LỰC VIỆT NAM TRƯỜNG ĐẠI HỌC ĐIỆN LỰC GIÁO TRÌNH ĐẠI HỌC BẢO VỆ RƠLE TRONG HỆ THỐNG ĐIỆN Tài liệu tham khảo nội bộ dùng trong Khoa Hệ thố

TRƯỜnG ĐẠI HỌC BÁCH KHOA HÀ nội VIỆn CÔnG nghệ THÔnG TIn VÀ TRUYỀn THÔnG TIN HỌC ĐẠI CƯƠNG Bài 10. Các cấu trúc lập trình trong C Nội dung 1. Cấu trúc

PowerPoint Template

giáo án dạy thêm môn Toán lớp 6 - Download.com.vn

Bài tập thực hành Chuyên đề 1 CNPM - Java Khoa CNTT- Trường ĐH Công nghệ TP.HCM Lab 01: LẬP TRÌNH JAVA CƠ BẢN VỚI NET BEANS A. MỤC TIÊU: Hướng dẫn tải

Chương 1:

Microsoft Word - on-tap-phan-lam-van.docx

Microsoft Word - co_ban_ve_jquery.docx

CÁC TỪ VIẾT TẮT, KÝ HIỆU ĐƯỢC DÙNG TRONG LUẬN VĂN

Tìm hiểu ngôn ngữ lập trình Visual Basic Tìm hiểu ngôn ngữ lập trình Visual Basic Bởi: Khuyet Danh Tìm hiểu ngôn ngữ lập trình Visual Basic Tổng quan

Chương trình dịch

Các biến và các kiểu dữ liệu trong JavaScript Các biến và các kiểu dữ liệu trong JavaScript Bởi: Hà Nội Aptech Các biến (Variables) Biến là một tham c

SM-N9208 SM-N920C SM-N920CD SM-N920I Sách hướng dẫn sử dụng Vietnamese. 08/2015. Rev.1.0

Hãy chọn phương án đúng CÂU HỎI TRẮC NGHIỆM TIN HỌC 7 HK1 Câu 1: Bảng tính thường được dùng để: a. Tạo bảng điểm của lớp em b. Bảng theo dõi kết quả h

KỸ NĂNG GIAO TIẾP ỨNG XỬ Trong cuộc sống, trong giao tiếp hàng ngày con người luôn phải ứng phó với biết bao tình huống, có lúc dễ dàng xử lý, có lúc

Slide 1

Tài liệu Hướng dẫn sử dụng

ĐỀ CƯƠNG ÔN TẬP HỌC KÌ I MÔN TOÁN 6 A. LÝ THUYẾT : I. SỐ HỌC: 1. Viết dạng tổng quát của tính chất giao hoán, kết hợp, của phép cộng và phép nhân, tín

Ngày xưa - Thành Bắc Ninh Tỉnh Bắc Ninh là cửa ngõ của cố đô Thăng Long, là vùng đất trung chuyển giữa kinh đô xưa với miền địa đầu giáp giới Trung Qu

Quy Tắc Đạo Đức Panasonic

No tile

Kiểu dữ liệu văn bản Kiểu dữ liệu văn bản Bởi: PGS. TS. NGƯT Phạm Văn Huấn Ngoài những dữ liệu số như các số nguyên, số thực, máy tính còn có thể lưu

SM-G935F SM-G935FD Sách hướng dẫn sử dụng Vietnamese. 02/2016. Rev.1.0

DANH MỤC ĐỀ TÀI TIỂU LUẬN MÔN HỌC

2018 Nhận xét, phân tích, góp ý cho Chương trình môn Tin học trong Chương trình Giáo dục Phổ thông mới

CÂU CHUYỆN TUẪN TIẾT CỦA TƯỚNG LÊ VĂN HƯNG Mạnh Kim/Huỳnh Quang Nghĩa Chuẩn tướng Lê Văn Hưng Đối diện tôi là một ông già ốm yếu 75 tuổi nhưng còn rất

Lớp đối tượng String Lớp đối tượng String Bởi: Khuyet Danh Ngôn ngữ C# hỗ trợ khá đầy đủ các chức năng của kiểu chuỗi mà chúng ta có thể thấy được ở c

NGHỆ THUẬT DIONYSOS NHƯ MỘT DIỄN NGÔN TRONG THƠ THANH TÂM TUYỀN Trần Thị Tươi 1 Tóm tắt Là một trong những thành viên trụ cột của nhóm Sáng Tạo những

Microsoft Word - danh-sach-lien-ket-doi-trong-c.docx

Microsoft Word - L?m c?m Sài Gòn thiên h? s?.doc

Phân tích bài Tiếng nói của văn nghệ

HƯỚNG DẪN TRƯỚC KHI BAY CÙNG HÀNG KHÔNG HẢI ÂU ( HAA ) A. NHỮNG ĐIỀU CẦN LƯU Ý - Chuẩn bị đầy đủ giấy tờ tùy thân như Hộ chiếu / Chứng Minh Thư nhân d

Phong cách học tập BÁO CÁO CỦA Sample Report Phong cách học tập Bản đánh giá Phong cách học tập Của: Sample Report Ngày: 09/07/2019 Copyright

TRƯỜNG ĐẠI HỌC SƯ PHẠM TP. HỒ CHÍ MINH KHOA HÓA HỌC KHÓA LUẬN TỐT NGHIỆP Tên đề tài: SỬ DỤNG MOODLE THIẾT KẾ WEBSITE HỖ TRỢ VIỆC TỰ HỌC CHƯƠNG HIDROCA

Nguồn Động lực BÁO CÁO CỦA Sample Report Nguồn Động lực Bản đánh giá Phong cách động lực Báo cáo của: Sample Report Ngày: 08/06/2017 Bản quyền Copyrig

TRƯỜNG ĐẠI HỌC KINH TẾ TP

Document

Các Vấn Đề Cơ Sở Của Khoa Học Máy Tính Th.S GVC Tô Oai Hùng BAØI TAÄP CHÖÔNG 1 1. Viết giải thuật để mô tả thói quen mỗi buổi sáng của bạn, từ lúc ngh

1 LƯU ĐÌNH NAM

Gia sư tiểu học CHUẨN KIẾN THỨC, KĨ NĂNG MÔN TOÁN LỚP 1 (Tuần 1 35) TUẦN: 1 Từ 24/8 đến 28/8 LỚP Tiết Tên bài dạy Yêu cầu c

SM-G925F Sách hướng dẫn sử dụng Vietnamese. 04/2015. Rev.1.0

1

Bài Học 4 20 Tháng 7 26 Tháng 7 NHƠN TỪ VÀ CÔNG LÝ TRONG THI THIÊN VÀ CHÂM NGÔN CÂU GỐC: Hãy đoán xét kẻ khốn cùng và người mồ côi; Hãy xử công bình c

BỘ GIÁO DỤC VÀ ĐÀO TẠO

SỞ GD& ĐT NGHỆ AN TRƯỜNG THPT HÀ HUY TẬP I. Đọc hiểu (3,0 điểm) KỲ THI KHẢO SÁT KÌ I NĂM HỌC ĐỀ THI MÔN: NGỮ VĂN- LỚP 10 Thời gian làm bài:

Sổ tay hướng dẫn Phương pháp đánh giá hiện trạng bờ biển bằng ghi hình video (SVAM)

Bình giảng tác phẩm “Chiếc thuyền ngoài xa” của Nguyễn Minh Châu

Microsoft Word - Tran Thi Thuy Linh.doc

Hướng dẫn sử dụng Bếp Từ Bosch PID775N24E Bếp từ 3 bếp nhập khẩu Bosch PID775N24E có DirectControl với truy cập trực tiếp đến 17 cấp độ nấu ăn. 3 khu

HƯỚNG DẪN SỬ DỤNG BẾP TỪ BOSCH PID679F27E Cảm ơn quý khách hàng đã lựa chọn sản phẩm bếp điện từ mang thương hiệu nổi tiếng BOSCH, hi vọng sản phẩm sẽ

Bia GV LDTE

CẢI CÁCH GIÁO DỤC

Phần mở đầu

UART0

Soạn bài liệt kê

Trung Tâm Gia Sư Tài Năng Việt Đề Số 1 Câu 1: Sau khi thực hiện đoạn chương trình sau, giá trị của biến S bằng bao nhiêu: S

Slide 1

PowerPoint Template

DỰ ÁN XÂY NHÀ TÌNH THƢƠNG (TẠI CHÙA LIÊN SƠN) Thực hiện : Phạm Thị Hồng Yến Thầy : Chơn Nguyên Chủ trì chùa Liên Sơn Tổ 7, ấp 5, Xã Thanh Sơn, Định Qu

SM-G960F/DS SM-G965F/DS Sách hướng dẫn sử dụng Vietnamese. 03/2018. Rev.1.1

KHÁI NIỆM CHUNG VỀ MÁY ĐIỆN KHÁI NIỆM CHUNG VỀ MÁY ĐIỆN Bởi: Nguyễn Tuấn Hùng KHÁI NIỆM CHUNG VỀ MÁY ĐIỆN ĐỊNH NGHĨA VÀ PHÂN LOẠI Định nghĩa Máy điện

quytrinhhoccotuong

L P M C TIÊU 12 nguyên tắc vàng Bạn thân mến, Thật vui mừng vì bạn là một người có trách nhiệm với chính cuộc sống của mình, có

Toïa ñaøm veà phöông phaùp ñoïc vaø hoïc KT ngaøy 20/3/04, trình baøy trong 20 phuùt, khoaûng 5-6 trang

APPROACH S60 Hướng dẫn sử dụng

Bản ghi:

Bởi: Thanh Hiền Vũ TEMPLATE Trong phần này, chúng ta tìm hiểu về một trong các đặc tính còn lại của C++, đó là template (khuôn mẫu). Các template cho phép chúng ta để định rõ, với một đoạn mã đơn giản, một toàn bộ phạm vi của các hàm có liên quan (đa năng hóa) gọi là các hàm template-hoặc một toàn bộ phạm vi của các lớp có liên quan-gọi là lớp template. Chúng ta có thể viết một hàm template đơn giản cho việc sắp xếp một mảng và C++ tự động phát sinh các hàm template riêng biệt mà sẽ sắp xếp một mảng int, sắp xếp một mảng float, Chúng ta có thể viết một lớp template cho lớp stack và sau đó C++ tự động phát sinh các lớp template riêng biệt như lớp stack của int, lớp stack của float, Các hàm template: Các hàm đa năng hóa bình thường được sử dụng để thực hiện các thao tác tương tự trên các kiểu khác nhau của dữ liệu. Nếu các thao tác đồng nhất cho mỗi kiểu, điều này có thể thực hiện mạch lạc và thuận tiện hơn sử dụng các hàm template. Lập trình viên viết định nghĩa hàm template đơn giản. Dựa vào các kiểu tham số cung cấp trong lời gọi hàm này, trình biên dịch tự động phát sinh các hàm mã đối tượng riêng biệt để xử lý mỗi kiểu của lời gọi thích hợp. Trong C, điều này có thể được thực hiện bằng cách sử dụng các macro tạo với tiền xử lý #define. Tuy nhiên, các macro biểu thị khả năng đối với các hiệu ứng lề nghiêm trọng và không cho phép trình biên dịch thực hiện việc kiểm tra kiểu. Các hàm template cung cấp một giải pháp mạch lạc giống như các macro, nhưng cho phép kiểm tra kiểu đầy đủ. Chẳng hạn, chúng ta muốn viết hàm lấy trị tuyệt đối của một số, chúng ta có thể viết nhiều dạng khác nhau như sau: int MyAbs(int X) return X>=0?X:-X; 1/8

long MyAbs(long X) return X>=0?X:-X; double MyAbs(double X) return X>=0?X:-X; Tuy nhiên với các hàm này chúng ta vẫn chưa có giải pháp tốt, mang tính tổng quát nhất như hàm có tham số kiểu int nhưng giá trị trả về là double và ngược lại. Tất cả các hàm template định nghĩa bắt đầu với từ khóa template theo sau một danh sách các tham số hình thức với hàm template vây quanh trong các ngoặc nhọn (< và >); Mỗi tham số hình thức phải được đặt trước bởi từ khóa class như: template <class T > hoặc template <class T1, class T2, > Các tham số hình thức của một định nghĩa template được sử dụng để mô tả các kiểu của các tham số cho hàm, để mô tả kiểu trả về của hàm, và để khai báo các biến bên trong hàm. Phần định nghĩa hàm theo sau và được định nghĩa giống như bất kỳ hàm nào. Chú ý từ khóa class sử dụng để mô tả các kiểu tham số của hàm template thực sự nghĩa là "kiểu có sẵn và kiểu người dùng định nghĩa bất kỳ". Khi đó, hàm trị tuyệt đối ở trên viết theo hàm template: template <class T> T MyAbs(T x) 2/8

return (x>=0)?x:-x; Hàm template MyAbs() khai báo một tham số hình thức T cho kiểu của một số. T được tham khảo như một tham số kiểu. Khi trình biên dịch phát hiện ra một lời gọi hàm MyAbs() trong chương trình, kiểu của tham số thứ nhất của hàm MyAbs() được thay thế cho T thông qua định nghĩa template, và C++ tạo một hàm template đầy đủ để trả về trị tuyệt đối của một số của kiểu dữ liệu đã cho. Sau đó, hàm mới tạo được biên dịch. Chẳng hạn: cout<<myabs(-2)<<endl; cout<<myabs(3.5)<<endl; Trong lần gọi thứ nhất, hàm MyAbs() có tham số thực là int nên trình biên dịch tạo ra hàm int MyAbs(int) theo dạng của hàm template, lần thứ hai sẽ tạo ra hàm float MyAbs(float). Mỗi tham số hình thức trong một định nghĩa hàm template phải xuất hiện trong danh sách tham số của hàm tối thiểu một lần. Tên của tham số hình thức chỉ có thể sử dụng một lần trong danh sách tham số của phần đầu template. Ví dụ 9.1: Sử dụng hàm template để in các giá trị của một mảng có kiểu bất kỳ. CT9_1.CPP 1: //Chương trình 9.12: #include <iostream.h>3:4: template<class T>5: void PrintArray(T *Array, const int Count)6: 7: for (int I = 0; I < Count; I++)8: cout << Array[I] << " ";9:10: cout << endl;11: 12: 13: int main()14: 15: const int Count1 = 5, Count2 = 7, Count3 = 6;16: int A1[Count1] = 1, 2, 3, 4, 5;17: float A2[Count2] = 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7;18: char A3[Count3] = "HELLO";19: cout << "Array A1 contains:" << endl;20: PrintArray(A1, Count1); //Hàm template kiểu int21: cout << "Array A2 contains:" << endl;22: PrintArray(A2, Count2); //Hàm template kiểu float23: cout << "Array A3 contains:" << endl;24: PrintArray(A3, Count3); //Hàm template kiểu char25: return 0;26: Chúng ta chạy ví dụ 9.1, kết quả ở hình 9.1 3/8

Hình 9.1: Kết quả của ví dụ 9.1 Ví dụ 9.2: Hàm template có thể có nhiều tham số. CT9_2.CPP 1: //Chương trình 9.22: #include <iostream.h>3:4: template<class T>5: T Max(T a, T b)6: 7: return (a>b)?a:b;8: 9:10: int main()11: 12: float A,B;13: cout<<"enter first number:";14: cin>>a;15: cout<<"enter second number:";16: cin>>b;17: cout<<"maximum:"<<max(a,b);18: return 0;19: Chúng ta chạy ví dụ 9.2, kết quả ở hình 9.2 Hình 9.2: Kết quả của ví dụ 9.2 Một hàm template có thể được đa năng hóa theo vài cách. Chúng ta có thể cung cấp các hàm template khác mà mô tả cùng tên hàm nhưng các tham số hàm khác nhau. Một hàm template cũng có thể được đa năng hóa bởi cung cấp hàm non-template với cùng tên hàm nhưng các tham số hàm khác nhau. Trình biên dịch thực hiện một xử lý so sánh để xác định hàm gọi khi một hàm được gọi. Đầu tiên trình biên dịch cố gắng tìm và sử dụng một đối sánh chính xác mà các tên hàm và các kiểu tham số đối sánh chính xác. 4/8

Nếu điều này thất bại, trình biên dịch kiểm tra nếu một hàm template đã có mà có thể phát sinh một hàm template với một đối sánh chính xác của tên hàm và các kiểu tham số. Nếu một hàm template như thế được tìm thấy, trình biên dịch phát sinh và sử dụng hàm template thích hợp. Chú ý xử lý đối sánh này với các template đòi yêu các đối sánh chính xác trên tất cả kiểu tham số-không có các chuyển đổi tự động được áp dụng. Các lớp template: Bên cạnh hàm template, ngôn ngữ C++ còn trang bị thêm lớp template, lớp này cũng mang đầy đủ ý tưởng của hàm template. Các lớp template được gọi là các kiểu có tham số (parameterized types) bởi vì chúng đòi hỏi một hoặc nhiều tham số để mô tả làm thế nào tùy chỉnh một lớp template chung để tạo thành một lớp template cụ thể. Chúng ta cài đặt một lớp Stack, thông thường chúng ta phải định nghĩa trước một kiểu dữ liệu cho từng phần tử của stack. Nhưng điều này chỉ mang lại sự trong sáng cho một chương trình và không giải quyết được vấn đề tổng quát. Do đó chúng ta định nghĩa lớp template Stack. Ví dụ 9.3: File TSTACK.H: TSTACK.H 1: //TSTACK.H2: //Lớp template Stack3: #ifndef TSTACK_H4: #define TSTACK_H5:6: #include <iostream.h>7: 8: template<class T>9: class Stack10: 11: private:12: int Size; //Kích thước stack13: int Top;14: T *StackPtr;15: public:16: Stack(int = 10);17: ~Stack()18: 19: delete [] StackPtr;20: 21: int Push(const T&);22: int Pop(T&);23: int IsEmpty() const24: 25: return Top == -1;26: 27: int IsFull() const28: 29: return Top == Size - 1;30: 31: ;32:33: template<class T>34: Stack<T>::Stack(int S)35: 36: Size = (S > 0 && S < 1000)? S : 10;37: Top = -1;38: StackPtr = new T[Size];39: 40: 41: template<class T>42: int Stack<T>::Push(const T &Item)43: 44: if (!IsFull())45: 46: StackPtr[++Top] = Item;47: return 1;48: 49: return 0;50: 51:52: template<class T>53: int Stack<T>::Pop(T &PopValue)54: 55: if (!IsEmpty())56: 57: PopValue = StackPtr[Top--];58: return 1;59: 60: return 0;61: 62:63: #endif File CT9_3.CPP: 5/8

CT9_3.CPP 1: //CT9_3.CPP2: //Chương trình 9.33: #include "tstack.h"4:5: int main()6: 7: Stack<float> FloatStack(5);8: float F = 1.1;9: cout << "Pushing elements onto FloatStack" << endl;10: while (FloatStack.Push(F))11: 12: cout << F << ' ';13: F += 1.1;14: 15: cout << endl << "Stack is full. Cannot push " << F << endl16: << endl << "Popping elements from FloatStack" << endl;17: while (FloatStack.Pop(F))18: cout << F << ' ';19: cout << endl << "Stack is empty. Cannot pop" << endl;20: Stack<int> IntStack;21: int I = 1;22: cout << endl << "Pushing elements onto IntStack" << endl;23: while (IntStack.Push(I))24: 25: cout << I << ' ';26: ++I ;27: 28: cout << endl << "Stack is full. Cannot push " << I << endl29: << endl << "Popping elements from IntStack" << endl;30: while (IntStack.Pop(I))31: cout << I << ' ';32: cout << endl << "Stack is empty. Cannot pop" << endl;33: return 0;34: Chúng ta chạy ví dụ 9.3, kết quả ở hình 9.3 Hình 9.3: Kết quả của ví dụ 9.3 Hàm thành viên định nghĩa bên ngoài lớp template bắt đầu với phần đầu là 6/8

template <class T > Sau đó mỗi định nghĩa tương tự một định nghĩa hàm thường ngoại trừ kiểu phần tử luôn luôn được liệt kê tổng quát như tham số kiểu T. Chẳng hạn: template<class T> int Stack<T>::Push(const T &Item). Ngôn ngữ C++ còn cho phép chúng ta tạo ra các lớp template linh động hơn bằng cách cho phép thay đổi giá trị của các thành viên dữ liệu bên trong lớp. Khi đó lớp có dạng của một hàm với tham số hình thức. Ví dụ 9.4:? File TSTACK.H: TSTACK.CPP 1: //TSTACK.H2: //Lớp template Stack3: #ifndef TSTACK_H4: #define TSTACK_H5:6: #include <iostream.h>7:8: template<class T,int Elements>9: class Stack10: 11: private:12: int Top;13: T StackArray[Elements];14: public:15: Stack();16: int Push(const T&);17: int Pop(T&);18: int IsEmpty() const19: 20: return Top == -1;21: 22: int IsFull() const23: 24: return Top == Elements - 1;25: 26: ;27:28: template<class T,int Elements>29: Stack<T,Elements>::Stack()30: 31: Top = -1;32: 33:34: template<class T,int Elements>35: int Stack<T,Elements>::Push(const T &Item)36: 37: if (!IsFull())38: 39: StackArray[++Top] = Item;40: return 1;41: 42: return 0;43: 44:45: template<class T,int Elements>45: int Stack<T,Elements>::Pop(T &PopValue)47: 48: if (!IsEmpty())49: 50: PopValue = StackArray[Top--];51: return 1;52: 53: return 0;54: 55:56: #endif File CT9_4.CPP: 7/8

CT9_4.CPP 1: //CT9_3.CPP2: //Chương trình 9.43: #include "tstack.h"4:5: int main()6: 7: Stack<float,5> FloatStack;8: float F = 1.1;9: cout << "Pushing elements onto FloatStack" << endl;10: while (FloatStack.Push(F))11: 12: cout << F << ' ';13: F += 1.1;14: 15: cout << endl << "Stack is full. Cannot push " << F << endl16: << endl << "Popping elements from FloatStack" << endl;17: while (FloatStack.Pop(F))18: cout << F << ' ';19: cout << endl << "Stack is empty. Cannot pop" << endl;20: Stack<int,10> IntStack;21: int I = 1;22: cout << endl << "Pushing elements onto IntStack" << endl;23: while (IntStack.Push(I))24: 25: cout << I << ' ';26: ++I;27: 28: cout << endl << "Stack is full. Cannot push " << I << endl29: << endl << "Popping elements from IntStack" << endl;30: while (IntStack.Pop(I))31: cout << I << ' ';32: cout << endl << "Stack is empty. Cannot pop" << endl;33: return 0;34: Chúng ta chạy ví dụ 9.4, kết quả ở hình 9.4 Hình 9.4: Kết quả của ví dụ 9.4 8/8