cuốn sách gpt4 ai đã làm

C++ Generics 1: Mẫu

In lại Tác giả: Sahara Thời gian cập nhật: 2024-10-31 18:10:36 59 4
mua khóa gpt4 Nike

Các vấn đề và giải pháp gây ra bởi các kiểu dữ liệu trong lập trình.

int maxt(int, int); gấp đôi maxt(double, double);

Nếu có một trình giữ chỗ T có thể thay thế loại, việc viết mã dư thừa có thể được đơn giản hóa.

T maxt(T,T);

mẫu C++

Tuyên bố mẫu như sau.

mẫu

Mẫu là từ khóa khai báo mẫu của C++. Bên trong dấu ngoặc nhọn là tên kiểu danh sách tham số mẫu, là từ khóa khai báo kiểu giữ chỗ.

mẫu T maxt(T x, T y){ return (x>y)? x: y;

mẫu chức năng

Trong giai đoạn biên dịch trước, khi một mẫu hàm được gọi trong chương trình, trình biên dịch sẽ thay thế phần giữ chỗ kiểu bằng kiểu thực tế để tạo ra một hàm thực thể. Nếu trình biên dịch có thể suy ra loại tham số mẫu được yêu cầu từ các tham số thực tế của hàm, nó không cần phải chuyển vào tham số mẫu.

template T maxt(T x, T y){ return (x>y)?x:y; } int main(int argc, char* argv[]){ // std::cout<< maxt< int>(4,6)<< std::endl; std::cout<< maxt(4,6)<< std::endl;

mẫu lớp

Khi khai báo một lớp, hãy sử dụng mẫu để khai báo mẫu.

mẫu lớp Vòng tròn{ public: Vòng tròn(T r });

Nếu một hàm thành viên được triển khai bên ngoài mẫu lớp thì nó phải được khai báo dưới dạng mẫu hàm.

mẫu Vòng tròn::Circle(T r){}

Khi gọi, bạn cần chuyển loại cụ thể bằng dấu ngoặc nhọn sau tên lớp.

Vòng tròn vòng tròn;

Lập trình mẫu của STL không quan tâm đến công nghệ hướng đối tượng. Nó tin rằng việc đóng gói dữ liệu quá mức theo các lớp sẽ ảnh hưởng đến hiệu quả thực thi của chương trình. Để quản lý mã tốt hơn, STL sử dụng một số lượng lớn các mẫu lớp được tạo bởi các cấu trúc mà không có quyền truy cập. quyền.

mẫu biến

Mẫu biến, mở rộng mẫu để triển khai các biến như pi. Khi T là double, trả về 3,14. Khi T là int, trả về 3. Khi T là chuỗi, trả về "3,14" hoặc "pi".

Những nỗ lực của tiêu chuẩn C++ mới về thiết kế chung

tự động và decltype

Trong C++ 11, từ khóa auto được sử dụng để suy ra kiểu dữ liệu của biến auto a=100; kiểu auto có thể được suy ra thông qua khả năng bộ nhớ kiểu của trình biên dịch hoặc gợi ý kiểu decltype.

Tạo ra các kiểu phức tạp bằng cách sử dụng bộ nhớ kiểu

Khả năng hiện tại của Auto bị hạn chế và chỉ có hiệu quả đối với các kiểu dữ liệu có sẵn của hệ thống. Đối với các kiểu do người dùng xác định hoặc các kiểu phức tạp, chỉ khi trình biên dịch đã có đủ kinh nghiệm thì nó mới có khả năng rút ra được.

bản đồ<>>::const_iterator iter1=map1.begin(); auto iter2=map1.begin();

Vì lệnh trước trình biên dịch đã biết loại map1.begin(), nên khi xử lý lệnh thứ hai, nó sử dụng khả năng nhớ của mình để tự động suy ra loại iter2.

loại từ chối``````````````````````````)

Trong C++ 11, dectype có thể được sử dụng để hướng dẫn tạo ra kiểu trả về giá trị của hàm. về và trình biên dịch cần suy ra. loại trả giá trị của hàm, loại decltype có thể được sử dụng. về công việc phái sinh này.

mẫu auto Multiply(T t, U u)->decltype(t*u){ return t*u }

Việc sử dụng tính năng tự động trả giá trị kiểu của hàm được gọi này là trình tự động trả giá trị giá trị tự động.

Coi auto là một loại dữ liệu thì auto cũng là một loại chung, ngoại trừ việc không cần phải khai báo với tên loại từ khóa và kiểu thực thi Hoạt động động và các ý tưởng phái sinh được cung cấp bởi ứng dụng.

sample number

Theo tính chất của tham số thực tế, tham số mẫu được chia thành ba loại: tham số loại, tham số không phải kiểu và tham số số do xác định mẫu.

Tham số Type

Tên kiểu bao gồm:

  • Hệ thống tổng hợp các loại
  • Loại dữ liệu do người dùng xác định
  • Thực thi các lớp mà trình biên dịch vừa học
  • phụ thuộc vàomáy đánh tênbí danh loại được xác định rõ ràng

tham số không phải kiểu

C++ cho phép các biến hoặc thông tin đối tượng thường được xác định trong danh sách mẫu tham số, có giới hạn như mẫu. tương tự là các hằng số trong mẫu mã. chuyển đổi thành int, đưa ra giới hạn như bool), kiểu liệt kê, con trỏ và kiểu tham chiếu.

Hỗ trợ C++11, chỉ định các tham số không phải kiểu tại thời điểm định nghĩa, như mẫu hạn chế.

Mẫu định nghĩa tham số

Việc sử dụng lớp mẫu làm tham số lớp mẫu không được nhấn mạnh rằng các loại tham số phải là lớp mẫu mà vẫn được nhấn số lượng tham số của lớp mẫu.

// Mẫu lớp với mẫu đơn tham số struct S_Tmp{}; // Mẫu lớp có nhiều mẫu tham số struct D_Tmp{} // Lớp với mẫu lớp tham số duy nhất làm tham số Mẫu mẫu<>lớp T> struct MyTest{}; int main(){ MyTest tt1; tt1; // return error về 0 }

Kết quả các tham số và tham số thực tế

Forced boost of function mẫu số

Trình biên dịch có thể suy ra các tham số thực tế tương ứng với các tham số dựa trên các loại tham số thực tế of function. hàm không được cung cấp trong. giữ chỗ cho các tham số chính.

con trỏ đối số

Trong C++, con trỏ là một loại dữ liệu và có thể được sử dụng làm mẫu đối số.

Sử dụng công cụ sửa đổi const và &

Bạn có thể sử dụng các công cụ sửa đổi const và & trong mẫu lệnh gọi tham số danh sách.

mẫu const T1& add(const T1& a, const T2& b){ return a }

Chuyên môn hóa mẫu và khởi tạo mẫu

Mẫu chuyên môn

Những thay đổi về loại dữ liệu thường xuyên không liên quan đến logic nghiệp vụ. Khác biệt riêng của dữ liệu với các thuật toán tương ứng với các loại khác thì các thuật toán phải được viết Riêng biệt.

Chuyên môn hóa các chức năng mẫu

Ví dụ: đối số với các kích thước xác định của các hàm, phép so sánh thuật toán cho kiểu số và chuỗi kiểu khác nhau và cần được khai triển riêng.

template T mymax(T a, T b){ return a>b?a:b; } template<> char* mymax(char* a, char* b){ return (strcmp(a,b)< 0)?b: Một }

Mẫu <> được sử dụng để hợp nhất nó với maxt mẫu hệ thống.

Chuyên môn hóa và chuyên môn hóa một phần các lớp mẫu

// Sample information struct Test{}; // Mẫu chuyên biệt một phần kiểm tra cấu trúc{}; // Mẫu chuyên biệt hoàn toàn<> struct Test< int, nổi>{};

Show sample body

Mức độ ưu tiên của trình biên dịch khi tạo mã thực thi từ các mẫu phù hợp.

  1. Mẫu chuyên nghiệp (chức năng hoặc lớp)
  2. Đặc biệt một phần mẫu (lớp)
  3. Sample information (hàm or layer)

Cuối cùng, bài viết về C++ Generics 1: Mẫu kết thúc tại đây. bài viết về CFSDN hoặc tiếp tục duyệt các bài viết liên quan.

59 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress