Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Cách sử dụng template trong C++

  1. #1
    No Avatar
    duydq Khách

    Mặc định Cách sử dụng template trong C++

    Chào các bạn.
    Hôm nay tình cờ mình biết được CongDongCViet thông qua DDTH, rất vui được tham gia thảo luận cùng các bạn yêu thích C/C++.

    Để ra mắt mình sẽ viết loạt bài về cách sử dụng template trong C++ .
    Bài viết này mình sẽ chia ra nhiều phần, hôm nay mình xin được trình bày phần 1.

    Phần 1: Funtion Templates

    Giả sử như chúng ta muốn viết một hàm tính giá trị lớn nhất của 2 số, ta có thể định nghĩa một macro theo kiểu của C:
    "
    Code:
     #define max(a, b) ((a) > (b) ? (a) : (b))
    "hoặc:
    Code:
    int max(int a, int b){
      return a > b ? a : b;
    }
    Nhưng ta muốn viết hàm max cho cả kiểu double, long, float thì sao? Ta sẽ viết các hàm overload tương tự như thế này ?
    Code:
    float max(float a, float b);
    long max (long a, long b);
    double max(double a, double b);
    hay
    Code:
    long double max (long double a, long double b);
    Kô có kiểu dữ liếu số nào lớn hơn long double đúng không các bạn? Nhưng thật không may, có vài trường hợp thất bại. Vì sao thì dành cho các bạn tìm hiểu nha

    Trong C++, chúng ta có thể giải quyết vấn đề này nhanh chóng bằng cách dùng "parameterized type" hay còn gọi template. Ta có thể định nghĩa hàm template giải quyết vấn đề như sau:
    Code:
     template <class T> inline T max(T a, T b)
            {
                    return a > b ? a : b;
            }
    "template <class T>" được dùng để khai báo một template. T là tham số template, một tham số kiểu. Khi đó ta có thể sử dụng template này như sau:

    Code:
    int a = 1;
    int b = 2;
    int iM = max(a,b);
    Lúc này kiểu của T là "int" vì a, b là các số nguyên.
    Code:
    double x = 0.5 ;
    double y = 1.5;
    double dM = max(x,y)
    Lúc này kiểu của T là "double" vì x, y là các số double.

    Quá trinh sinh ra hàm thực sự đúng với kiểu dữ liệu truyền vào được gọi là "instantiation".
    Chú ý: Ta nên dùng const T& thay cho T trong khai báo tham số template, sẽ thảo luận vấn đề này sau.

    Template không những áp dụng cho các kiểu dữ liệu số mà có thể áp dụng cho các kiểu dữ liệu khác ví dụ:

    Code:
    class A {
            public:
                    int operator>(const A&); 
            };
    
            A a;
            A b;
    
            A c = max(a, b);
    Template rất mạnh nhưng cũng khá phức tạp. Template là độc quyền của C++, không có template trong C hoặc Java. Tham vọng của Bjarne Stroustrup (cha đẻ của C++) là hiện thực template để hỗ trợ "generic programming" trong lập trình hướng đối tượng (OOP) hơn là tính hiệu quả của template so với các ngôn ngữ khác.

    Tạm thời ta kết thúc phần 1 ở đây, hẹn các bạn ở phần 2: Tính năng mới của C ++ - member template, class template
    Bài viết có gì sai sót mong các bạn bổ sung.
    Duy Do
    Đã được chỉnh sửa lần cuối bởi duydq : 16-09-2006 lúc 04:07 PM.

  2. #2
    Ngày gia nhập
    08 2006
    Bài viết
    2

    Mình đang gặp một bài về template la
    Tìm phần tử lớn nhất trong một mảng(int ,float, doube, Pháno..)
    Nhưng mình không biết là trong template có cho định nghĩa kiểu dữ liệu không
    Nếu không thì phải làm thế nào
    Cảm ơn các bạn nha
    Bao_Tu_Dau_Lam_Xung

  3. #3
    No Avatar
    foureye2004 Khách

    Hay quá!Hy vọng bạn sẽ post phần 2 sớm.

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mình đang gặp một bài về template la
    Tìm phần tử lớn nhất trong một mảng(int ,float, doube, Pháno..)
    Nhưng mình không biết là trong template có cho định nghĩa kiểu dữ liệu không
    Nếu không thì phải làm thế nào
    Cảm ơn các bạn nha
    Lập 1 topic mới để hỏi nhé , bạn í ơi , post nhanh lên anh em đang chờ .

  5. #5
    Ngày gia nhập
    03 2017
    Bài viết
    29

    Chờ hơn 10 năm. Nhưng hay.

Các đề tài tương tự

  1. Lỗi khi sử dụng lớp template từ dll trong C++
    Gửi bởi nailut trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 13-05-2011, 03:58 PM
  2. Kỹ thuật C++ Sử dụng template trong C++?
    Gửi bởi prt_awm trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 13-12-2010, 02:29 PM
  3. Kỹ thuật C++ Template Method có liên quan gì đến template trong C++ ko?
    Gửi bởi ten_truycap trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 22-10-2010, 11:26 PM
  4. Cách xây dựng và sử dụng template và mảng template trong C++?
    Gửi bởi nhatnha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 03-08-2010, 06:24 PM
  5. Template trong C++ để làm gì?
    Gửi bởi chuong01 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 15-06-2010, 12:45 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn