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 →

1234

intT;/ / T có kiểu tài liệu là int

typedefintT;/ / T là một ( alias ) tên gọi khác của kiểu int

intA[100];/ / A là một mảng 100 thành phần int

typedefintA[100];/ / A là một alias ( tên gọi khác ) của kiểu ” mảng 100 thành phần int “

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

123456

typedefintA[100];/ / A là một alias ( tên gọi khác ) của kiểu ” mảng 100 thành phần int “

/ / SampleStruct là một struct chứa một mảng 100 thành phần int

structSampleStruct{

Adata;

};

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 →

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 “

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

typedef →

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 →

12345

usingI=int;/ / kiểu int

usingA

=int[100];/ / kiểu tài liệu array có 100 thành phần int

usingFP=void(*)(int);/ / kiểu tài liệu ” con trỏ tới hàm có 1 tham số kiểu int, trả về void “

usingMP=void(Foo::*)(int);/ / kiểu tài liệu ” con trỏ tới hàm thành viên của Foo có một tham số int ,

/ / trả về void

Hãy nhớ rằngkhông tạo ra kiểu tài liệu mới, nó chỉ tạo ra cách khác để refer đến kiểu tài liệu đã có. Định nghĩa kiểu tài liệu con trỏ hàm thường thì → Định nghĩa kiểu tài liệu con trỏ hàm trỏ đến phương pháp non-static của class → Định nghĩa cùng lúc nhiều kiểu tài liệu bằngTừ C + + 11 tất cả chúng ta hoàn toàn có thể sử dụng cú phápthay thế

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 →

12345678910111213141516171819202122232425262728

#include

usingnamespacestd;

template

classSample{

private:

Tt;

public:

voidsetValue(Tt){

this->t=t;

}

voidprintf(){

cout<

}

};

usingSample_int=Sample;

// typedef Sample_int Sample; –> Không dùng được typedef với template

intmain(){

Sample_intsample;

sample.setValue(10);

sample.printf();

return0;

}

Chạy chương trình sẽ in ra hiệu quả là 10 .— Phạm Minh Tuấn ( Shun ) —