1. Trang chủ
  2. » Luận Văn - Báo Cáo

lap trinh C so 7

10 7 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

 Phải xác định một kiểu dữ liệu cụ thể được lưu trong stack.. Khuôn hình lớp …[r]

(1)(2)

Nội dung chính

Khn hình cho phép xây dựng hàm

và lớp tổng quát

(3)

1 Định nghĩa khn hình

 Template cho phép định nghĩa hàm có đặc điểm chung  C++ sử dụng template để tạo thể cụ thể

hàm cần thiết

 Ví dụ: định nghĩa hàm max

template<class kind>

kind max(kind d1, kind d2) {

if (d1 > d2)

return (d1); return (d2);

}

 Cấu trúc <class kind> báo cho C++ biết kind

(4)

Định nghĩa khn hình…

Ví dụ: Sử dụng template

main() {

float f = max(3.5, 8.7); int i = max(100, 800); char ch = max('A', 'Q'); int i2 = max(600, 200); }

 Khi C++ phát câu lệnh: float f = max(3.5, 8.7);

kiểm tra để xác định xem hàm max(float, float) có mã lệnh hay chưa tự động tạo mã lệnh chưa có

 Chú ý gặp câu lệnh int i2 = max(600, 200);

(5)

Chun biệt hố hàm

Khi sử dụng hàm max để so sánh hai string sau:

main() {

char *namel = "Able"; char *name2 = "Baker";

cout << max(namel, name2) << '\n';

}

 Vì string biểu diễn trỏ (char *), nên câu

lệnh if (dl > d2) so sánh giá trị trỏ nội dụng trỏ

 Mà ta muốn C++ sử dụng cách so sánh với

(6)

Chuyên biệt hoá hàm …

Thực trình chun biết hố (specialization)

Ta định nghĩa lại hàm max dùng cho kiểu string.

char *max(char *dl, char *d2)

{

if (strcmp(dl, d2) < 0) return (dl); return (d2);

}

 Khi C++ phát câu lệnh cout << max(namel, name2) << '\n';

(7)

2 Khn hình lớp

#include <stdlib.h> #include <iostream.h>

const int STACK_SIZE = 100; // số lượng phần tử lớn Stack template<class kind>

class stack { private:

int count; // Số lượng phần tử Stack

kind data[STACK_SIZE]; // Mảng chứa phần tử Stack public:

stack (void) {count = 0; // Stack ban đầu rỗng} void push(const kind item) {

data[count] = item; ++count;

}

kind pop(void) { count;

(8)

Khn hình lớp …

Nếu ta khai báo:

stack a_stack; // câu lệnh không hợp lệ  Stack template chung

 Khi C++ nhìn thấy lệnh khai báo này, hỏi “stack

nào?”

 Phải xác định kiểu liệu cụ thể lưu stack  Phải khai báo:

stack<int> a_stack; // Các phần tử stack kiểu số nguyên 

Sau đó, ta sử dụng stack sau:

(9)

Khn hình lớp …

Định nghĩa hàm thành phần bên

ngoài định nghĩa lớp sau:

template<class kind>

inline void stack<kind>::push(const kind item) {

data[count] = item; ++count;

(10)

Chuyên biệt hoá lớp

template <class kind>stack { }

 Giới thiệu cho C++ biết cách tạo tập lớp có tên

stack<int>, stack<double>, stack<float>,…

 C++ tự động tạo hàm thành viên như: stack<int>:

:push, stack<double>: :push, stack<float>::push

 Nếu khai báo hàm thành viên cách tường minh C+

+ sử dụng định nghĩa trước

inline void stack<char *>::push(const char * item) {

data[count] = strdup(item); ++count;

}

 Từ khố template nói cho C++ biết ”Đây class chung, tạo

một phiên tương ứng với nó”

 Nếu khơng có từ khố template, C++ hiểu hàm

Ngày đăng: 29/04/2021, 01:38