• Không có kết quả nào được tìm thấy

 trình bày những ứng dụng thiết thực nhất khi nguời dùng sử dụng template trong lập trình c++ bằng cách:

N/A
N/A
Protected

Academic year: 2022

Chia sẻ " trình bày những ứng dụng thiết thực nhất khi nguời dùng sử dụng template trong lập trình c++ bằng cách:"

Copied!
15
0
0

Loading.... (view fulltext now)

Văn bản

(1)

Chủ Đề: ứng Dụng Template Trong C++

 Yêu cầu:

 trình bày những ứng dụng thiết thực nhất khi nguời dùng sử dụng template trong lập trình c++ bằng cách:

 slide ngắn gọn,rõ ràng,cô đọng.

Có ví dụ cụ thể,làm nổi bật ý nghĩa của template.

các thành viên: nhóm 18

1. nguyễn văn Dũng: 070064T 2.Lê văn Hoàng :070457M 3.hoàng nguyên Anh:070023T 4.Nguyễn tuấn Anh :070027T

(dung_thomrau)

1

(2)

Giới thiệu chung.

template(khuôn mẫu) 1.Template là gì ?

Template giống như một "cỗ máy" có khả năng sản xuất ra các hàm và lớp dựa vào kiểu của các tham số. Bằng cách sử dụng template, bạn có thể chỉ cần thiết kế 1 lớp (hàm) mà có khả năng thao tác với nhiều loại dữ liệu khác nhau, thay vì bạn phải tạo nhiều lớp (hàm) khác nhau để thao tác với từng loại dữ liệu khác nhau.

2.Template hổ trợ ở đâu.

Được hổ trợ trong c++,lập trình hướng đối tượng.

3. Đặc điểm.

Template không phải là các hàm, lớp thông thường, chúng được complie dựa theo yêu cầu, có nghĩa là code của template function không được biên dịch (complie) cho đến khi có một thể hiện

(instantiation) của nó được đòi hỏi (sử dụng). Ngay lúc đó complier tạo ra một hàm cụ thể cho kiểu dữ liệu cụ thể.

2

(3)

4. Một số template có sẵn trong C++

 CArray : template class dùng tạo ra mảng với các phần tử có kiểu tuỳ ý. CArray cung cấp cáđể c mảng tương tự như mảng trong C nhưng với CArray bạn có thể tăng hoặc giảm số lượng các phần tử khi cần thiết. Chỉ số của mảng (array index) luôn bắt đầu từ 0.

Các truy suất CArray cũng tương tự như array trong C.

 CList : template class dùng để tạo ra list với các phần tử có kiểu tuỳ ý. CList cung cấp các danh sách liên kết đôi đã được sắp xếp.

 CTypedPtrArray : template class for type-safe arrays of pointers.

Ngoài ra còn có

CTypedPtrList : template class for type-safe lists of pointers.

CTypedPtrMap : template class for type-safe maps with pointers.

 CMap : template class dùng để tạo ra "map" với các phần tử có key và kiểu tuỳ ý. Giá trị key là duy nhất trong một "map". Dùng CMap bạn có thể coi nó như một cuốn tự điển dể tra cứu 1 cách

dễ dàng các phần tử. 3

(4)

Đây là một tính năng mới sử dụng theo chuẩn ANSI-C++

Quy tắc khai báo template trong 1 hàm:

cú pháp :

Template<class

indetifier>function_declaration;

Template<typename indetifier>function_declaration;

(Tương tự)

t ừ khoá từ khoá Hàm thực thi

VD: template<class t>

t congmang(t a, int n);

void main()

{ congmang<int>(a,20); } //cộng 20 pt của mảng.

Kiểu dữ liệu

( 2 cách) Tên biến

4

(5)

ở ví dụ trên chúng ta đã tạo 1 kiểu dữ liệu có tên là t, vì vậy trong hàm sau đó ,t trở thành 1 kiểu dữ liệu hợp lệ và

nó được sử dụng cho kiểu dữ liệu tham số mảng a,và giá trị trả về của hàm congmang.

vd: // function template #include <iostream>

using namespace std;

template <class T>

T GetMax (T a, T b) {

T result;

result = (a>b)? a : b;

return (result);

}

(dung_thomrau)

5

(6)

int main () {

int i=5, j=6, k;

long l=10, m=5, n;

k=GetMax<int>(i,j);

n=GetMax<long>(l,m);

cout << k << endl;

cout << n << endl;

return 0;

}

1 hàm nhưng có hai kiểu dữ liệu được sử dụng.

vì vậy dùng template sử dụng được nhiều kiểu dữ liệu khác nhau trong cùng 1 hàm.

6

(7)

Ngoài ra chúng ta có thể sử dụng nhiều tham số khác nhau cho template trong cùng 1 hàm

vd

template <class T, class U> //hai tham số template T GetMin (T a, U b)

{

return (a<b?a:b);

}

void main() {

int i,j;

long l;

i = GetMin<int,long> (j,l); //hoặc dùng i = GetMin (j,l);

}

// Trong vd này mẫu getmin chấp nhận 2 tham số có kiểu dữ liệu khác nhau và trả về một đối tượng có cùng kiểu dữ liệu với tham số đầu tiên T.

7

(8)

Quy tắc khai báo template trong 1 class.

cú pháp:Template<class indetifier> class {... };

t ừ khoá t ừ khoá Tên biến Tên lớp vd:

template <class T, int i>

class TempClass { public:

TempClass( void );

~TempClass( void );

int MemberSet( T a, int b );

private:

T Tarray[i];

int arraysize;

};

8

(9)

Trong ví dụ này, template class sử dụng 2 tham số, một có kiểu là T và một là int. Tham số T có thể được truyền vào với bất cứ kiểu nào, kể các các struct và các đối tượng. Ví dụ như khi bạn muốn tạo ra một đối tượng dùng để thao tác với kiểu int thì bạn dùng như sau :

và khi sử dụng thì chúng ta sử dụng giống như phần bên lớp đã trình bày nhưng thêm vào từ khoá sau

vd:

TempClass <int> myobject (5, 5);

//TempClass <float> myobject (5, 5);

từ khoá và kiểu dữ liệu

thêm vào

(dung_thomrau)

9

(10)

Tương tự như function template, bạn có thể sử dụng class template để tạo ra tập hợp các lớp cùng tác động lên nhiều kiểu dữ liệu khác nhau, ví dụ :

vd

template <class T, int i> class TempClass { public:

TempClass( void );

~TempClass( void );

int MemberSet( T a, int b );

private:

T Tarray[i];

int arraysize;

};

Trong ví dụ này, template class sử dụng 2 tham số, một có kiểu là T và một là int. Tham số T có thể được truyền vào với bất cứ kiểu nào, kể các các struct và các đối tượng. Ví dụ như khi bạn muốn tạo ra một đối tượng dùng để thao tác với kiểu int thì bạn dùng như sau :

10

(11)

TempClass <int> myobject (5, 5);

Còn khi bạn muốn thao tác với kiểu float thì bạn lại khai báo như sau : TempClass <float> myobject (5, 5);

(Tất nhiên là các tham số của function template và của class template là linh động phụ thuộc vào bạn).

Các thành phần trong class template được định nghĩa có khác chút ít so với những lớp nontemplate :

template <class T, int i>

int TempClass< T, i >::MemberSet( T a, int b ) { if( ( b >= 0 ) && (b < i) ) {

Tarray[b++] = a;

return sizeof( a );

} else

return -1;

}

Templates for Constructors and Destructors

(dung_thomrau)

11

(12)

template <class T, int i>

TempClass< T, i >::TempClass( void ){

TRACE( "TempClass created.\n" );

}

template <class T, int i>

TempClass< T, i >::~TempClass( void ){

TRACE( "TempClass destroyed.\n" );

}

Template không phải là các hàm, lớp thông thường, chúng được complie dựa theo yêu cầu, có nghĩa là code của template

function không được biện dịch (complie) cho đến khi có một thể hiện (instantiation) của nó được đòi hỏi (sử dụng). Ngay lúc đó complier tạo ra một hàm cụ thể cho kiểu dữ liệu cụ thể.

12

(13)

Chuyên môn hoá template.

việc chuyên môn hoá mẫu ccho phép ta tạo ra những bản

thực thi đặc biệt khi làm việc với một loại dữ liệu xác định nào đó.nó cho phép ta lựa chọn dữ liệu có tính chọn lọc.

vd:

#include<“iostream.h”>

template<class t>

class pair {

t values1, t values2;

public:

pair(t first,t second )

{ values1 = first;values2 = second;}

t module() {return 0;}

};

(dung_thomrau)

13

(14)

template<>

class pair<int>{

int values1,values2;

public:

pair (int first,int second )

{ values1 = first,values \ second;}

int module();

};

template<>

int pair<int>::module(){ return values%value2;}

int main() { pair <int> myints(100,75);

pair<float >myfloats(100.0,75.0);

cout<<myints.module()<<“\n”; cout<<myfloats.module<<“”\n;

return 0; }////////////////////////ket qua 20 0;

14

(15)

có thể chuyên môn hóa dữ liệu theo cấu trúc sau:

template<>slass class_name <type>

từ khoá tên lớp kiểu dl

ở ví dụ trên, giả sử rằng lớp pair có 1 hàm để trả về phần dư trong phép chia giữa 2 trường trong,nhưng chúng ta chỉ muốn nó làm việc khi kiểu dữ liệu int còn những kiểu dữ liệu khác thì luôn trả về 0.

(dung_thomrau)

15

Tài liệu tham khảo

Tài liệu liên quan

Khám phá trang 66 Tin học lớp 7: Nêu các bước thực hiện thay đổi bố cục trang trình chiếu bằng cách chọn mẫu có sẵn trên phần mềm..

Hệ thống thiết kế đã ứng dụng và minh chứng các kĩ thuật truyền dữ liệu có dây và không dây, cùng với các cảm biến cần thiết có thể được sử dụng để theo dõi các

Do đó mà các thiết bị tham gia vào mô hình này sẽ được hưởng lợi từ việc mô hình huấn luyện được học từ nh iều nguồn dữ liệu từ khác nhau , giúp đưa ra kết quả,

Có nhiều phương pháp để chẩn đoán bản chất các khối u ở phổi: các kỹ thuật chẩn đoán hình ảnh như chụp CLVT, chụp cộng hưởng từ, chụp PET/CT…và các kỹ

Khởi động trang 97 Tin học 10: Để tương tác với người sử dụng trong khi thực hiện chương trình, các ngôn ngữ lập trình có các câu lệnh để đưa dữ liệu ra màn hình hay

Đâu đó quanh ta vẫn còn những con người không có lòng vị tha, sống ích kỉ hẹp hòi; những người chỉ biết đến bản thân mình mà không cần suy nghĩ cho người khác, để đạt

- Cuộc đời như một con đê dài hun hút và mỗi người đều phải đi trên con đê của riêng mình. Nhiệm vụ của chúng ta là phải đi qua những “bóng nắng, bóng râm” đó để

Đầu tiên, sự sẵn sàng về công nghệ (bao gồm: sự lạc quan, sự đổi mới, sự khó chịu, sự bất an) được giả định là tiền đề của cả sự hữu ích cảm nhận và sự dễ sử dụng