Search
Latest topics
Struct là gì ?
Page 1 of 1
Struct là gì ?
Struct là gì?
Các ngôn ngữ lập trình cũ trước đây chỉ có biến và mảng để lưu trữ thông tin, nhưng chỉ lưu trữ được có một kiểu dữ duy nhất. Sau này đến khi các ngôn ngữ như Foxpro, Pascal, C … ra đời thì cho ra kiểu lưu trữ thông tin mới ở dạng cấu trúc, mẫu tin cho phép lưu trữ thông tin của nhiều kiểu dữ liệu khác nhau vào một nơi, chỉ đại diện bằng một tên duy nhất. Ngôn ngữ C cho ra kiểu Struct - là một kiểu dữ liệu do người dùng định nghĩa, cho phép gom nhóm nhiều kiểu thông tin lại với nhau thành một cấu trúc gồm nhiều thông tin, ví dụ như một cấu trúc thông tin về Con người thì gồm có : tên, tuổi, cân nặng, nghề nghiệp, ngày sinh …
struct ConNguoi
{
int tuoi;
char ten[30];
int cannang;};Lúc đó Struct chỉ lưu trữ các biến thành viên bên trong, tất cả đều public hết. Muốn truy cập các biến thành viên bên trong, ta chỉ cần dùng toán tử chấm “.” :
main()
{
struct ConNguoi a;
a.ten = ‘”Nguyen Van A”;
a.tuoi = 25;
printf(" Ten la : %d \n", a.ten);
}Về bản chất thì kiểu dữ liệu Struct cũng giống như các kiểu dữ liệu bẩm sinh mà ngôn ngữ C đã cung cấp như : char, int … cũng được tạo trên vùng nhớ Stack, nhưng Struct là một cấu trúc gồm nhiều thông tin chứ không còn tính đơn lẽ về thông tin nữa.
Sau này đến C++ thì có OOP, class ra đời, Struct vẫn được giữ và mở rộng ra tý là có thể chứa các hàm (function) bên trong gần giống như Class nhưng Struct vẫn là kiểu tham trị được tạo ra trên vùng nhớ Stack, còn Class thì kiểu tham chiếu được lưu trữ trên vùng nhớ mở rộng Heap.
Cho đến khi C# ra đời thì thật sự rắc rối, nhập nhằng giữa khái niệm Struct và Class vì đến lúc này Microsoft lại mở rộng tính năng của kiểu Struct ra gần giống như của Class như : các thông tin bên trong Struct mặc định cũng private, Struct có thể implement các interface, Struct cũng có các Property … Người ta vẫn biết một bên là tham trị còn một bên là tham chiếu nhưng hai kiểu dữ liệu này có rất nhiều đặc điểm giống nhau, có nhiều câu hỏi đặt ra vậy hỏi khi nào dùng kiểu Class khi nào dùng kiểu Struct, sao Microsoft lại mở rộng ra tính năng của Struct giống Class chi cho khó hiểu vậy thì không ai trả lời được hết trơn, Tùng đã tham khỏa rất nhiều tài liệu, forum nhưng cũng không có được sự phân biệt rõ ràng (Tùng sẽ có bài viết để giúp chúng ta phân biệt được các điểm khác nhau Class và Struct, nói chung là không hoàn toàn tuyệt đối nhưng cũng phần nào giúp chúng ta có được sự phân biệt khác nhau giữa Class và Struct, thuyết tương đối mà )
Cú pháp khai báo Struct strong C# :
modifiers struct Test : [interface list]
{
// Khai báo các biến thành viên
//
}ví dụ :
public struct ToaDo
{
int _x;
int _y;
public ToaDo(int x, int y)
{
_x = x;
_y = y;
}
public int X
{
get { return _x; }
set { _x = value; }
}
public int Y
{
get { return _y; }
set { _y = value; }
}
}
Trong C# thì :
- Constructor của Struct phải có tham số
- Struct không kế thừa
- Struct không có hàm hủy
- Khi ta không cung cấp hàm constructor thì hàm constructor mặc nhiên của trình biên dịch sẽ tự khởi gán các biến thành viên về các giá trị 0, null tùy theo kiểu tham trị hay tham chiếu của biến thành viên.
- Ta có thể dùng kiểu Struct mà có thể dùng toán tử new hay không tùy ý. Khi dùng toán tử new thì constructor sẽ được triệu gọi, hay ta có thể khởi gán đơn lẻ cho các biến thành viên trong kiểu Struct.
- Ta không được khởi tạo giá trị cho các biến thành viên của Struct trong lúc khai báo :
public struct ToaDo
{
int _x = 10;
int _y = 20; // ……
}
Các ngôn ngữ lập trình cũ trước đây chỉ có biến và mảng để lưu trữ thông tin, nhưng chỉ lưu trữ được có một kiểu dữ duy nhất. Sau này đến khi các ngôn ngữ như Foxpro, Pascal, C … ra đời thì cho ra kiểu lưu trữ thông tin mới ở dạng cấu trúc, mẫu tin cho phép lưu trữ thông tin của nhiều kiểu dữ liệu khác nhau vào một nơi, chỉ đại diện bằng một tên duy nhất. Ngôn ngữ C cho ra kiểu Struct - là một kiểu dữ liệu do người dùng định nghĩa, cho phép gom nhóm nhiều kiểu thông tin lại với nhau thành một cấu trúc gồm nhiều thông tin, ví dụ như một cấu trúc thông tin về Con người thì gồm có : tên, tuổi, cân nặng, nghề nghiệp, ngày sinh …
struct ConNguoi
{
int tuoi;
char ten[30];
int cannang;};Lúc đó Struct chỉ lưu trữ các biến thành viên bên trong, tất cả đều public hết. Muốn truy cập các biến thành viên bên trong, ta chỉ cần dùng toán tử chấm “.” :
main()
{
struct ConNguoi a;
a.ten = ‘”Nguyen Van A”;
a.tuoi = 25;
printf(" Ten la : %d \n", a.ten);
}Về bản chất thì kiểu dữ liệu Struct cũng giống như các kiểu dữ liệu bẩm sinh mà ngôn ngữ C đã cung cấp như : char, int … cũng được tạo trên vùng nhớ Stack, nhưng Struct là một cấu trúc gồm nhiều thông tin chứ không còn tính đơn lẽ về thông tin nữa.
Sau này đến C++ thì có OOP, class ra đời, Struct vẫn được giữ và mở rộng ra tý là có thể chứa các hàm (function) bên trong gần giống như Class nhưng Struct vẫn là kiểu tham trị được tạo ra trên vùng nhớ Stack, còn Class thì kiểu tham chiếu được lưu trữ trên vùng nhớ mở rộng Heap.
Cho đến khi C# ra đời thì thật sự rắc rối, nhập nhằng giữa khái niệm Struct và Class vì đến lúc này Microsoft lại mở rộng tính năng của kiểu Struct ra gần giống như của Class như : các thông tin bên trong Struct mặc định cũng private, Struct có thể implement các interface, Struct cũng có các Property … Người ta vẫn biết một bên là tham trị còn một bên là tham chiếu nhưng hai kiểu dữ liệu này có rất nhiều đặc điểm giống nhau, có nhiều câu hỏi đặt ra vậy hỏi khi nào dùng kiểu Class khi nào dùng kiểu Struct, sao Microsoft lại mở rộng ra tính năng của Struct giống Class chi cho khó hiểu vậy thì không ai trả lời được hết trơn, Tùng đã tham khỏa rất nhiều tài liệu, forum nhưng cũng không có được sự phân biệt rõ ràng (Tùng sẽ có bài viết để giúp chúng ta phân biệt được các điểm khác nhau Class và Struct, nói chung là không hoàn toàn tuyệt đối nhưng cũng phần nào giúp chúng ta có được sự phân biệt khác nhau giữa Class và Struct, thuyết tương đối mà )
Cú pháp khai báo Struct strong C# :
modifiers struct Test : [interface list]
{
// Khai báo các biến thành viên
//
}ví dụ :
public struct ToaDo
{
int _x;
int _y;
public ToaDo(int x, int y)
{
_x = x;
_y = y;
}
public int X
{
get { return _x; }
set { _x = value; }
}
public int Y
{
get { return _y; }
set { _y = value; }
}
}
Trong C# thì :
- Constructor của Struct phải có tham số
- Struct không kế thừa
- Struct không có hàm hủy
- Khi ta không cung cấp hàm constructor thì hàm constructor mặc nhiên của trình biên dịch sẽ tự khởi gán các biến thành viên về các giá trị 0, null tùy theo kiểu tham trị hay tham chiếu của biến thành viên.
- Ta có thể dùng kiểu Struct mà có thể dùng toán tử new hay không tùy ý. Khi dùng toán tử new thì constructor sẽ được triệu gọi, hay ta có thể khởi gán đơn lẻ cho các biến thành viên trong kiểu Struct.
- Ta không được khởi tạo giá trị cho các biến thành viên của Struct trong lúc khai báo :
public struct ToaDo
{
int _x = 10;
int _y = 20; // ……
}
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
Thu Aug 23, 2012 5:38 am by Admin
» Tuyệt kỹ cua giai
Thu Aug 23, 2012 5:36 am by Admin
» NETCAT.........
Mon Aug 13, 2012 6:35 am by Admin
» Bảo mật CSDL bằng phương pháp mã hóa.
Tue Apr 17, 2012 10:04 pm by Admin
» Hàm mã hóa MD5 bằng JavaScript
Tue Apr 17, 2012 10:03 pm by Admin
» Giá của món quà
Fri Apr 13, 2012 6:01 am by Admin
» Sẽ chỉ yêu ai?
Fri Apr 13, 2012 6:01 am by Admin
» Cách đọc bảng chữ cái!
Thu Apr 12, 2012 10:37 pm by Admin
» Gắn trojan, keylog, virus vào website, forum
Tue Apr 10, 2012 1:14 am by Admin