Sử Dụng Typedef Và Using Trong C++ | CppDeveloper

Cú pháp cơ bản của typedef

Cú pháp của typedef tương đối giống với khai báo biến và hàm, tuy nhiên mục đích của nó là để định nghĩa một tên khác cho một kiểu dữ liệu →

C++ int T; // T có kiểu dữ liệu là int typedef int T; // T là một (alias) tên gọi khác của kiểu int int A[100]; // A là một mảng 100 phần tử int typedef int A[100]; // A là một alias (tên gọi khác) của kiểu "mảng 100 phần tử int"
1234 intT;// T có kiểu dữ liệu là inttypedefintT;// T là một (alias) tên gọi khác của kiểu intintA[100];// A là một mảng 100 phần tử inttypedefintA[100];// A là một alias (tên gọi khác) của kiểu "mảng 100 phần tử int"

Một khi type alias (tên thay thế) của một kiểu dữ liệu đã được định nghĩa thì tên đó có thể được dùng thay thế cho tên của kiểu dữ liệu gốc →

C++ typedef int A[100]; // A là một alias (tên gọi khác) của kiểu "mảng 100 phần tử int" // SampleStruct là một struct chứa một mảng 100 phần tử int struct SampleStruct { A data; };
123456 typedefintA[100];// A là một alias (tên gọi khác) của kiểu "mảng 100 phần tử int" // SampleStruct là một struct chứa một mảng 100 phần tử intstructSampleStruct{Adata;};
Hãy nhớ rằng typedef không tạo ra kiểu dữ liệu mới, nó chỉ tạo ra cách khác để refer đến kiểu dữ liệu đã có.

Một số cú pháp nâng cao hơn của typedef

Định nghĩa kiểu dữ liệu con trỏ hàm thông thường → C++ void (*f)(int); // f là "con trỏ tới hàm có 1 tham số kiểu int, trả về void" typedef void (*f)(int); // f là alias của kiểu "con trỏ tới hàm có // 1 tham số kiểu int, trả về void"
123 void(*f)(int);// f là "con trỏ tới hàm có 1 tham số kiểu int, trả về void"typedefvoid(*f)(int);// f là alias của kiểu "con trỏ tới hàm có // 1 tham số kiểu int, trả về void"
Định nghĩa kiểu dữ liệu con trỏ hàm trỏ đến phương thức non-static của class → C++ void (Foo::*pmf)(int); // pmf là một alias của "con trỏ tới hàm thành viên của Foo // có một tham số int trả về void" typedef void (Foo::*pmf)(int); // pmf là một alias của kiểu "con trỏ tới hàm // thành viên của Foo có một tham số int, trả về void
1234 void(Foo::*pmf)(int);// pmf là một alias của "con trỏ tới hàm thành viên của Foo // có một tham số int trả về void"typedefvoid(Foo::*pmf)(int);// pmf là một alias của kiểu "con trỏ tới hàm // thành viên của Foo có một tham số int, trả về void
Định nghĩa cùng lúc nhiều kiểu dữ liệu bằng typedef → C++ int *x, (*p)(); // x kiểu int*, p kiểu int(*)() typedef int *x, (*p)(); // x là alias của int*, p là alias của int(*)()
12 int*x,(*p)();// x kiểu int*, p kiểu int(*)()typedefint*x,(*p)();// x là alias của int*, p là alias của int(*)()

Khai báo alias sử dụng “using”

Từ C++11 chúng ta có thể sử dụng cú pháp using thay thế typedef → C++ using I = int; // kiểu int using A = int[100]; // kiểu dữ liệu array có 100 phần tử int using FP = void(*)(int); // kiểu dữ liệu "con trỏ tới hàm có 1 tham số kiểu int, trả về void" using MP = void (Foo::*)(int); // kiểu dữ liệu "con trỏ tới hàm thành viên của Foo có một tham số int, // trả về void
12345 usingI=int;// kiểu intusingA=int[100];// kiểu dữ liệu array có 100 phần tử intusingFP=void(*)(int);// kiểu dữ liệu "con trỏ tới hàm có 1 tham số kiểu int, trả về void"usingMP=void(Foo::*)(int);// kiểu dữ liệu "con trỏ tới hàm thành viên của Foo có một tham số int, // trả về void

Tạo một alias kiểu dữ liệu bằng using có tác dụng chính xác giống như với typedef. Nó chỉ đơn giản là một cú pháp thay thế để hoàn thành điều tương tự. Tuy nhiên có một điểm khác biệt đó là using có thể sử dụng với template trong khi typedef thì không. Hãy xem ví dụ sao để rõ hơn →

C++ #include <iostream> using namespace std; template <typename T> class Sample { private: T t; public: void setValue(T t) { this->t = t; } void printf() { cout << t << endl; } }; using Sample_int = Sample<int>; // typedef Sample_int Sample<int>; --> Không dùng được typedef với template int main() { Sample_int sample; sample.setValue(10); sample.printf(); return 0; }
12345678910111213141516171819202122232425262728 #include <iostream> usingnamespacestd; template<typenameT>classSample{private:Tt; public:voidsetValue(Tt){this->t=t;} voidprintf(){cout<<t<<endl;}}; usingSample_int=Sample<int>;// typedef Sample_int Sample<int>; --> Không dùng được typedef với template intmain(){Sample_int sample;sample.setValue(10);sample.printf();return0;}
Chạy chương trình sẽ in ra kết quả là 10.

— Phạm Minh Tuấn (Shun) —

  • Cplusplus
  • typedef
  • using
Trước đó

Tạo random number bằng thư viện chuẩn của C++

Tiếp theo

[CODING SKILL] Code thối – Code smell – Anti pattern

Tìm kiếm cho:

Facebook Page

Ads

Forum

Bài viết mới

  • Ý nghĩa của Change-Id trong Gerrit Code Review

    Tháng Một 27, 2022 0
  • Android Automotive OS – Android based platform dành cho ô tô

    Tháng Một 19, 2022 0
  • Dùng song song 2 mạng Ethernet và Wifi trên Windows

    Tháng Chín 27, 2021 0
  • Một số cách convert number sang string trong C++

    Tháng Năm 7, 2021 0
  • Toán tử ‘typeid’ trong C++

    Tháng Ba 8, 2021 0
  • Bộ tiền xử lý – Preprocessor trong C/C++

    Tháng Mười Hai 28, 2020 0
  • Cùng tìm hiểu về Base64 encoding

    Tháng Mười Một 4, 2020 0

Chuyên mục

  • 4 TÍNH CHẤT CỦA OOP
  • BEST PRACTICES
  • C++ NÂNG CAO
  • CODE GYM
  • CTDL & GIẢI THUẬT
  • DESIGN PATTERNS
  • KIẾN THỨC TỔNG HỢP
  • LINUX / YOCTO / AOSP
  • TECH365
  • VISUAL STUDIO

Copyright © 2024 CppDeveloper by Phạm Minh Tuấn (SHUN)

Từ khóa » Cách Dùng Hàm Typedef