Ví dụ về Lớp bản mẫu mảng: các hàm toán tử nhập xuất

Đề bài: Xây dựng lớp bản mẫu (template class – một số tài liệu còn dùng từ khuôn hình)mảng (sử dụng mảng động) với các phương thức sau: toán tử chỉ số, cấu tử mặc định, cấu tử có tham số, hủy tử, toán tử nhập xuất, hàm sắp xếp theo thứ tự tăng dần. Viết hàm main() minh họa các hàm đã viết của lớp bản mẫu với kiểu dữ liệu int.
Lời giải
Có thể đọc thêm về hàm bản mẫu và lớp bản mẫu tại đây

8 Responses to “Ví dụ về Lớp bản mẫu mảng: các hàm toán tử nhập xuất”

  1. svcnt47dh Says:

    sao lời giải của thầy chạy trong dev-c thì okie còn chạy trong visual thì không được vậy.

  2. bekhoebedep Says:

    Bài 1 dùng với kiểu int thì OK, nhưng với kiểu string thì làm sao so sánh được các phần tử. Nếu định nghĩa lại template thì còn gì ý nghĩa bản mẫu nữa. Kiểu dữ liệu người dùng lại càng khó hơn. Không dám hỏi thầy nhiều, sợ thầy trách suốt ngày théc méc😦

    • 4fire Says:

      Tất cả sẽ được giải quyết nếu em dùng lớp string (file header string) của C++. Nhớ #include file string vào phần đầu của chương trình.

  3. Đoàn Vượng CNT47DH Says:

    Thưa thầy em muôn hỏi về C#.
    1. Về khai báo 1 đối tượng
    Trong C++ khi khai báo sinhvien sv1;
    Thì lập tức hàm cấu tử đc gọi nhưng trong C#
    sinhvien sv1; thì hàm cấu tử vẫn chưa được gọi hả thầy?

    2. Về mảng các đối tượng:
    có mảng đc cấp phát:
    sinhvien[] sv1 = new sinhvien[n];
    Việc thực hiện phương thức nhap() cho mỗi phần tử sv[i] phải thông qua 1 đối tượng sinhvien temp;?
    Và phải sử dụng cấu tử copy hay 1 cách nào đó để gán lại cho sv[i] qua toán tử new??
    Liệu có thể làm 1 cách trong sáng hơn như C++ ko ạ?

    Em xin cảm ơn thầy.

  4. 4fire Says:

    Không phải, em chưa hiểu đúng cách làm việc của C#.
    Khi em khai báo sinhvien sv1; thì C# hiểu là có 1 biến tên là sv1 (kiểu như 1 reference) tên là sv1 sẽ trỏ tới 1 đối tượng lớp sinhvien, còn muốn khai báo đối tượng, trong C# em buộc phải dùng toán tử new một cách tường minh, ở điểm này C# triệt để hơn C++ em ạ. Ví dụ thế này:
    sinhvien sv1 = new sinhvien(); // gọi cấu tử mặc định
    Còn về mảng khi em thực hiện lệnh sinhvien[] sv1 = new sinhvien[n]; thì mới chỉ là có n biến thôi (sv1[i]) còn mỗi biến đó vẫn chưa chứa cái gì cả, em buộc phải dùng lệnh:
    sv1[i] = new sinhvien(); // gọi một hàm cấu tử nào đó
    thì sv1[i] mới sử dụng bình thường được.
    Chúc em thành công!

    • Đoàn Vượng CNT47DH Says:

      Em xin cảm ơn thầy, vì em muốn làm 1 số bài mẫu cho các bạn mới học nên em muốn làm sao cho đơn giản dễ hiểu nhất.
      C# bắt ng ta hiểu bản chất ngay từ việc khai báo –> dành cho ng lập trình chuyên nghiệp, còn ng mới bắt đầu thì có lẽ không nên học. Thầy nghĩ thế nào ạ?

  5. 4fire Says:

    Không phải thế, nếu nói thế thì người ta chỉ nên đi xe đạp chứ không nên đi ô tô vì ô tô đắt hay sao em?
    Thực ra là học cái gì cũng có cái khó của nó, nhưng nếu xác định là một lập trình viên thì phải học C++, C#, không thể khác được. Còn C++ mới là ngôn ngữ khó nhất em ạ.

  6. Đoàn Xuân Vượng Says:

    em muốn hỏi thầy về việc bắt phím trong C#. Có hàm nào tương tự như hàm getch() của C ko ạ?(em viết console app)
    và Em muốn khi ng dùng nhấn các phím Esc, hay 1 số phím bình thường khác các câu lệnh sẽ thực hện ngay mà ko chờ enter.
    Em cảm ơn thầy!


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: