Lập trình ứng dụng trong kỹ thuật - Cơ Điện Tử - Chương 3 pot

19 612 2
Lập trình ứng dụng trong kỹ thuật - Cơ Điện Tử - Chương 3 pot

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Lập trình ứng dụng kỹ thuật Chương TĨM TẮT CHƢƠNG : C++/CLI HƢỚNG ĐỐI TƢỢNG PHẦN A : GIỚI THIỆU TỔNG QUAN 1) Tổng quan phƣơng pháp lập trình : a) Lập trình tuyến tính : Đây phương pháp lập trình đời Đặc trưng lập trình tuyến tính tu theo lối : chương trình thực từ đầu đến cuối, lệnh lệnh kết thúc chương trình Đặc trưng lập trình tuyến tính :  Đơn giản : lập trình theo lối tuần tự, khơng phức tạp  Đơn luồng : có lng cơng việc thực Nhược điểm :  Khơng thể thực chương trình phức tạp  Chương trình dài b) Lập trình cấu trúc : Trong lập trình cấu trúc, chương trình chia nhỏ thành chương trình con, chương trình thực cơng việc xác định (chương trình hàm) Chương trình gọi đến chương trình giải thuật hay cú pháp định chương trình Một chương trình gọi nhiều lần chương trình Đặc trưng lập trình cấu trúc  Chương trình bao gồm hai thành phần : cấu trúc liệu giải thuật Cấu trúc liệu cách thức tổ chức liệu, cách mơ tả tốn dạng ngơn ngữ lập trình Giải thuật qui trình để thực tốn  Giải thuật ln phụ thuộc vào cấu trúc liệu Nhược điểm :  Không hỗ trợ việc sử dụng lại mã nguồn giải thuật phụ thuộc vào cấu trúc liệu Khi thay đổi cấu trúc liệu đồng thời phải thay đổi giải thuật c) Lập trình hướng đối tượng : Lập trình hướng đối tượng đời nhằm khắc phục hạn chế lập trình cấu trúc Lập trình hướng đối tượng xây dựng sở đối tượng Những đối tượng ngôn ngữ hướng đối tượng kết hợp mã liệu mà chúng nhìn nhận đơn vị Mỗi đối tượng có tên riêng biệt tất tham chiếu đến đối tượng tiến hành qua tên Như vậy, đối tượng có khả nhận vào thông báo, xử lý liệu (bên nó), gửi hay trả lời đến đối tượng khác hay đến môi trường Bộ mơn Cơ điện tử Trang Lập trình ứng dụng kỹ thuật Chương VD : Chuỗi kí tự C++/CLI dạng đối tượng Khi khai báo String^ a = “Hello” tức tạo đối tượng Đối tượng có tên a, ta tiến hành tham chiếu thông qua tên đối tượng : a->Length ; a->Substring() … 2) Lập trình hƣớng đối tƣợng: Lập trình hƣớng đối tƣợng (gọi tắt OOP, từ chữ Anh ngữ object-oriented programming), hay cịn gọi lập trình định hƣớng đối tƣợng, kĩ thuật lập trình hỗ trợ cơng nghệ đối tượng Một cách giản lược, khái niệm nỗ lực nhằm giảm nhẹ thao tác viết mã cho người lập trình, cho phép họ tạo ứng dụng mà yếu tố bên ngồi tương tác với chương trình giống tương tác với đối tượng vật lý Những đối tượng ngôn ngữ OOP kết hợp mã liệu mà chúng nhìn nhận đơn vị Mỗi đối tượng có tên riêng biệt tất tham chiếu đến đối tượng tiến hành qua tên Như vậy, đối tượng có khả nhận vào thơng báo, xử lý liệu (bên nó), gửi hay trả lời đến đối tượng khác hay đến mơi trường a) Các tính chất : Đối tƣợng (object): Các liệu mã lệnh kết hợp vào đơn vị đầy đủ tạo nên đối tượng Đơn vị tương đương với chương trình đối tượng chia thành hai phận chính: phần phƣơng thức (method) phần thuộc tính (attribute) Trong thực tế, phƣơng thức đối tượng hàm thuộc tính biến, tham số hay nội đối tượng (hay nói cách khác tập hợp liệu nội tạo thành thuộc tính đối tượng) Các phƣơng thức phương tiện để sử dụng đối tượng thuộc tính mơ tả đối tượng có tính chất Các phương thức thuộc tính thường gắn chặt với thực tế đặc tính sử dụng đối tượng VD : Trong toán quản lí Sinh viên trường Đại học Sinh viên xem đối tượng Các Sinh viên phân biệt với thông qua Họ tên Mỗi Sinh viên lại mô tả Ngày sinh, Nơi sinh, MSSV, Ngành học, Điểm số … ; thuộc tính đối tượng Sinh viên Người quản lí muốn tác động đến thơng tin Sinh viên phải thông qua phương thức đối tượng Sinh viên : Xem ngày sinh, Xem nơi sinh, Nhập điểm số, Xem điểm số, Sửa điểm số … Trong thực tế, đối tượng thường trừu tượng hóa qua việc định nghĩa lớp (class) Tập hợp giá trị có thuộc tính tạo nên trạng thái đối tượng Mỗi phƣơng thức hay liệu nội với tính chất định nghĩa (bởi người lập trình) xem đặc tính riêng đối tượng Nếu khơng có lầm lẫn tập hợp đặc tính gọi chung đặc tính đối tượng Tính đóng gói (Encapsulation) : Bộ mơn Cơ điện tử Trang Lập trình ứng dụng kỹ thuật Chương Các đối tượng có thuộc tính tương tự gom thành nhóm (lớp) Các thuộc tính chung đối tượng giữ lại thuộc tính chung trở thành thuộc tính lớp VD : nhóm đối tượng phương tiện giao thơng, nhóm đối tượng có chung thuộc tính : bánh, có động … có nhóm xe máy Nếu nhóm đối tượng có chung thuộc tính : có bánh, có động … có nhóm xe ơtơ Trong nhóm xe máy, có xe có gương chiếu hậu, có xe khơng có, gương chiếu hậu khơng phải thuộc tính chung khơng xem thuộc tính nhóm Việc truy xuất đến liệu thực thông qua phương thức trang bị cho nhóm Nếu người sử dụng muốn thay đổi thay đổi trạng thái đối tượng bắt buộc phải thông qua phương thức Việc cho phép mơi trường bên ngồi tác động lên liệu nội đối tượng theo cách hồn tồn tùy thuộc vào người viết mã Tính chất không cho phép người sử dụng đối tượng thay đổi trạng thái nội đối tượng Tính thừa kế (Inheritance) : Các lớp tổ chức theo sơ đồ phân cấp Lớp sở gọi lớp gốc (Root Class) Lớp phía gọi lớp cha hay lớp sở Lớp phía gọi lớp hay lớp dẫn xuất Lớp có khả kế thừa thuộc tính phương thức lớp cha Như vậy, định nghĩa lớp lớp lớp sở, ta định nghĩa xây dựng lại thuộc tính phương thức xây dựng cho lớp sở thay phải xây dựng lại (đây khả sử dụng lại mã nguồn) VD : lớp xe gắn máy, chia hai lớp lớp xe tay ga lớp xe số Trong lớp xe gắn máy có thuộc tính màu sơn, nhãn hiệu … lớp xe tay ga có quyền kế thừa thuộc tính lớp cha Tính đa hình (Polymorphism) : Các lớp dẫn xuất có lớp sở có thuộc tính khác hẳn Trong lớp cha, ta gọi phương thức từ đối tượng thuộc lớp khác kết khác VD : lớp sở Human có hai lớp Student Public Servant Trong lớp sở có định nghĩa phương thức Show() Nếu sử dụng phương thức đối tượng thuộc lớp Human cho biết số CMND đối tượng Nếu sử dụng phương thức đối tượng thuộc Student cho biết MSSV Nếu sử dụng phương thức đối tượng thuộc lớp Public Servant cho biết Mã số công chức Bộ mơn Cơ điện tử Trang Lập trình ứng dụng kỹ thuật Chương b) Các khái niệm : Lớp (Class) : Một lớp hiểu khuôn mẫu để tạo đối tượng Trong lớp, người ta thường dùng biến để mơ tả thuộc tính hàm để mô tả phương thức đối tượng Khi định nghĩa lớp, ta tạo đối tượng từ lớp Để việc sử dụng dễ dàng, thông qua hệ thống hàm tạo (constructor), người ta dùng lớp kiểu liệu để tạo đối tượng Nói tóm lại, lớp ln ln đặc trưng thuộc tính phương thức Lớp (subclass) Lớp lớp thông thường có thêm tính chất kế thừa phần hay tồn đặc tính lớp khác Lớp mà có tính chất lớp kế thừa gọi Lớp cha (parent class) Lớp trừu tƣợng (abstract class) Lớp trừu tượng lớp mà ta thực thể hóa thành đối tượng (tạo đối tượng) Thuộc tính (attribute) Thuộc tính lớp bao gồm biến, hằng, hay tham số nội lớp Ở đây, vai trị quan trọng thuộc tính biến chúng bị thay đổi suốt trình hoạt động đối tượng Các thuộc tính xác định kiểu kiểu chúng kiểu liệu cổ điển lớp định nghĩa từ trước Phƣơng thức (method) Phương thức lớp thường dùng để mô tả hành vi đối tượng (hoặc lớp) Mỗi phương thức thường định nghĩa hàm, thao tác để thực hành vi viết nội dung hàm Người ta định nghĩa thêm vài loại phương thức đặc biệt:  Hàm tạo (constructor) hàm dùng để tạo đối tượng, cài đặt giá trị ban đầu cho thuộc tính đối tượng  Hàm hủy (destructor) hàm dùng vào việc làm nhớ dùng để lưu đối tượng hủy bỏ tên đối tượng sau dùng xong, bao gồm việc xóa trỏ nội trả phần nhớ mà đối tượng dùng Bộ môn Cơ điện tử Trang Lập trình ứng dụng kỹ thuật Chương PHẦN B : CLASS TRONG C++/CLI Lớp C++/CLI đặc trưng thuộc tính phương thức Để bảo vệ tránh việc bị truy xuất tự từ bên ngồi, thuộc tính phương thức lớp có sử dụng từ khóa để qui định phạm vi truy xuất  private : từ khóa cho biết cho phép truy xuất nội lớp, không chia sẻ với lớp khác  protected : từ khóa cho biết truy xuất hạn chế, cho phép truy xuất nội lớp lớp lớp  public : từ khóa cho biết truy xuất tự do, cho phép truy xuất từ bên bên lớp Đối với ref class, ta khơng khai báo từ khóa qui định pham vi truy xuất, cách thức truy cập mặc định private 1) Khai báo Class: ref class Class_name // Class_name tên Class { Statement; }; // Đoạn mã Class // Lưu ý kết thúc Class phải có dấu ; VD : ref class Hinh_tron { public : // Variable : UInt16 R; // Method : UInt16 Chu_vi() { return 2*(Math::PI)*R; } UInt16 Dien_tich() { return (Math::PI)*R*R; } }; Trong ví dụ trên, tạo Class có tên Hinh_tron quản lí đối tượng hình trịn có bán kính khác Class có thuộc tính R (cho biết bán kính đối tượng Bộ mơn Cơ điện tử Trang Lập trình ứng dụng kỹ thuật Chương hình trịn) hai phương thức Chu_vi() (tính chu vi đối tượng hình trịn) Dien_tich() (tính diện tích đối tượng) Thuộc tính class : R Biến có kiểu liệu UInt16 Phương thức class : Chu_vi(), Dien_tich() Các hàm không tham số có trả giá trị 2) Sử dụng Class: Trong chương trình (hàm main()), để tạo đối tượng từ ref class khai báo, ta có hai cách : Cách : Dùng Handle^ : Cú pháp : Class_name^ name = gcnew Class_name(); // name tên đối tượng VD : Hinh_tron^ A = gcnew Hinh_tron(); // Tạo đối tượng hình trịn A Để truy xuất đến biến phương thức ref class, ta dùng toán tử “->” A->R = 5; // Gán giá trị cho thuộc tính R đối tượng Int16 x = A->Chu_vi(); Int16 y = A->Dien_tich(); VD : // x = 31 ( 2*3.14*5 = 31.4 ) // y = 78 ( 5*5*3.14 = 78.5) Cách : Dùng stack : Cú pháp : Class_name name ; VD : Hinh_tron A ; // name tên đối tượng // Tạo đối tượng hình trịn A Để truy xuất đến biến phương thức ref class, ta dùng toán tử “.” A.R = 5; // Gán giá trị cho thuộc tính R đối tượng Int16 x = A.Chu_vi(); Int16 y = A.Dien_tich(); VD : // x = 31 ( 2*3.14*5 = 31.4 ) // y = 78 ( 5*5*3.14 = 78.5) 3) Biến thành viên (Member Variable) : Các biến thành viên đơn giản biến khai báo bên class Cú pháp khai báo biến thành viên tương tự khai báo biến thông thường Tuy nhiên, biến thành viên, khởi tạo giá trị cho biến khai báo class biến kèm với đối tượng đối tượng khởi tạo Giá trị biến thành viên gán thông qua constructor hay gán trực tiếp thông qua việc truy xuất đến đối tượng VD : ref class Sinh_vien { Bộ môn Cơ điện tử Trang Lập trình ứng dụng kỹ thuật Chương public: String^ Ho_ten; UInt32 MSSV; String^ Nganh_hoc; … // biến thành viên }; Trong chương trình chính, muốn truy xuất đến biến thành viên class đó, bắt buộc phải thơng qua đối tượng Có nghĩa ta phải tạo đối tượng class trước sau truy xuất biến thành viên thông qua đối tượng Việc truy xuất đến biến thành viên thực thông qua toán tử “->” đối tượng kiểu handle hay toán tử “.” đối tượng kiểu stack VD : ref class Sinh_vien { public: String^ Ho_ten; UInt32 MSSV; String^ Nganh_hoc; // biến thành viên }; void main(void) { Sinh_vien^ A; // Tạo đối tượng kiểu handle Sinh_vien B; // Tạo đối tượng kiểu stack A->Ho_ten = “Nguyen Van A”; // Truy xuất đến biến thành viên B.Ho_ten = “Nguyen Van B”; A->MSSV = 8111123; B.MSSV = 8111124; Console::WriteLine(“{0}/t : {1}”,A->Ho_ten, A->MSSV); Console::WriteLine(“{0} /t: {1}”,B.Ho_ten, B.MSSV); Console::ReadKey(); } Kết in hình : Nguyen Van A Nguyen Van B : 8111123 : 8111124 Lưu ý : Nếu không gán giá trị cho biến thành viên tương ứng với đối tượng biến có giá trị mặc định giá trị mặc định kiểu liệu Biến tĩnh (static variable) : Bộ mơn Cơ điện tử Trang Lập trình ứng dụng kỹ thuật Chương Nếu muốn giá trị ban đầu cho biến khai báo biến thành viên class, ta phải sử dụng biến tĩnh (khi khai báo biến tĩnh thêm từ khóa static) Giá trị khởi tạo mặc định gán lần tạo đối tượng Do ta gán giá trị cho biến tĩnh biến cập nhật giá trị VD : ref class Sinh_vien { public: String^ Ho_ten; // biến thành viên UInt32 MSSV; static String^ Nganh_hoc = “Co dien tu” ; // Biến tĩnh }; void main(void) { Sinh_vien^ A; A->Ho_ten = “Nguyen Van A”; Console::WriteLine(“Ho va ten : {0}” , A->Ho_ten); Console::WriteLine(“Nganh hoc : {0}”, A->Nganh_hoc); Console::ReadKey(); } Kết in hình : Ho va ten : Nguyen Van A Nganh hoc : Co dien tu Các biến tĩnh cho phép truy xuất trực tiếp mà không cần phải thông qua đối tượng Việc truy xuất đến biến tĩnh thơng qua tên class tốn tử “::”; giá trị biến giá trị mặc định gán cho biến class VD: void main(void) { String^ a = Sinh_vien::Nganh_hoc; Console::WriteLine(“Nganh hoc : {0}”, a); Console::ReadKey(); } Kết in hình Bộ mơn Cơ điện tử : Nganh hoc : Co dien tu Trang Lập trình ứng dụng kỹ thuật Chương Các biến tĩnh hay biến thành viên gán giá trị khác thông qua đối tượng Trong trường hợp muốn khai báo biến số có giá trị cho trước không cho phép thay đổi giá trị này, ta khai báo biến dạng biến số (thêm từ khóa const khai báo) VD : ref class Sinh_vien { public: String^ Ho_ten; // biến thành viên UInt32 MSSV; const static String^ Nganh_hoc = “Co dien tu” ; // Biến số }; Các biến PI E class Math biến số Lưu ý : Để khai báo biến số tĩnh, ta dùng từ khóa const static hay literal Hai cách khai báo tương đương 4) Phƣơng thức thành viên (Member Method) : Cũng giống biến thành viên, phương thức thành viên đơn giản hàm khai báo bên class Cú pháp khai báo phương thức thành viên tương tự khai báo hàm thông thường VD : ref class Hinh_tron { public : // Variable : UInt16 R; // Method : UInt16 Chu_vi() { return 2*(Math::PI)*R; } UInt16 Dien_tich() { return (Math::PI)*R*R; } }; Trong ví dụ trên, có hai phương thức thành viên Chu_vi() Dien_tich() Lưu ý biến thành viên biến tồn cục, ta sử dụng biến khai báo Bộ mơn Cơ điện tử Trang Lập trình ứng dụng kỹ thuật Chương phương thức thành viên (hai phương thức thành viên ví dụ có sử dụng biến thành viên R) Các phương thức thành viên truy xuất thơng qua đối tượng toán tử “->” Lưu ý : Class cho phép khai báo phương thức tải (overload method) giống việc khai báo hàm tải (overload function) Phƣơng thức tĩnh (static method) : Phương thức tĩnh tương tự biến tĩnh : khai báo phương thức tĩnh thêm từ khóa static, phương thức tĩnh truy xuất trực tiếp qua tên class toán tử “::” Tất biến hay tham số sử dụng phương thức tĩnh bắt buộc phải biến tĩnh VD : ref class Sinh_vien { public: // biến thành viên tĩnh static String^ Ho_ten = “Nguyen Van A”; static UInt32 MSSV = 8111111; static String^ Nganh_hoc = “Co dien tu” ; // Phương thức tĩnh static void Show(Sinh_vien^ A) { Console ::WriteLine(“Ho va ten : ”+A->Ho_ten); Console ::WriteLine(“MSSV : ”+A->MSSV); Console ::WriteLine(“Nganh hoc : ”+A->Nganh_hoc); } }; void main(void) { Sinh_vien^ A; A->Ho_ten = “Nguyen Van B”; Sinh_vien::Show(A); Console::ReadKey(); } Kết in hình Bộ mơn Cơ điện tử : Ho va ten : Nguyen Van B MSSV : 8111111 Nganh hoc : Co dien tu Trang 10 Lập trình ứng dụng kỹ thuật Chương Các phương thức WriteLine(), Write(), ReadLine() … class Console hay Concat() class String phương thức tĩnh Constructor : Constructor phương thức đặc biệt class cho phép khởi tạo giá trị cho biến class khai báo Constructor khai báo bên Class Cú pháp : Class_name ( argument1 , argument 2, …) { Statement; } Trong đó, argument tham số constructor, tham số dùng để truyền giá trị cho biến class khởi tạo VD : khai báo Constructor cho class Hinh_tron ref class Hinh_tron { public : // Constructor : Hinh_tron (UInt16 r) { R = r; // truyền giá trị cho biến R class } // Variable : UInt16 R; … }; Khi tạo đối tượng, ta khởi tạo thuộc tính ban đầu đối tượng thơng qua constructor thay phải gán trực tiếp Vì có cách tạo đối tượng nên tương ứng có hai cách gọi constructor VD : tạo khởi tạo giá trị cho đối tượng A Kiểu Handle : Hinh_tron^ A = gcnew Hinh_tron(5) ; Kiểu Stack : Hinh_tron A (5); Trong ví dụ trên, đối tượng A sau tạo giá trị biến R A gán giá trị Lưu ý : Nếu class có khai báo constructor, tạo đối tượng ta phải theo cấu trúc constructor VD : Nếu class Hinh_tron có khai báo constructor, dịng lệnh sau tạo đối tượng báo lỗi : Bộ mơn Cơ điện tử Trang 11 Lập trình ứng dụng kỹ thuật Chương Kiểu Handle : Hinh_tron^ A = gcnew Hinh_tron() ; // Error Kiểu Stack : Hinh_tron A ; // Error Lí ta chưa truyền giá trị cho tham số constructor khai báo Kiểu Handle : Hinh_tron^ A = gcnew Hinh_tron(0) ; // OK Kiểu Stack : Hinh_tron A (0); // OK Copy constructor : Copy constructor phương thức cho phép gán lẫn đối tượng khác class tạo Cú pháp : Class_name ( const Class_name %p) { Val1 = p.Val1; Val2 = p.Val2; … Valn = p.Valn } Trong const từ khóa khai báo; Val1, Val2, …Valn biến class VD : xét lại ví dụ class Hinh_tron ref class Hinh_tron { public : // Variable : UInt16 R; // Constructor : Hinh_tron (UInt16 r) { R = r; // truyền giá trị cho biến R class } // Copy constructor : Hinh_tron (const Hinh_tron %p) { R = p.R; } … }; Trong chương trình chính, có hai đối tượng Hinh_tron tạo ra, ta gán lẫn hai đối tượng VD : void main(void) { Bộ môn Cơ điện tử Trang 12 Lập trình ứng dụng kỹ thuật Chương Hinh_tron A(10); Hinh_tron B = A; // Gán giá trị cho đối tượng B Console::WriteLine(“Chu vi hinh tron B = {0}”,B.Chu_vi()); Console::ReadKey(); } Kết in hình : Chu vi hinh tron B = 62 Destructor : Destructor phương thức đặc biệt class cho phép xóa đối tượng hay phương thức tạo trước Mục đích destructor giúp giải phóng nhớ cấp phát khởi tạo đối tượng đồng thời giải phóng tài nguyên hệ thống cung cấp cho đối tượng Destructor khai báo bên Class Cú pháp : ~Class_name () { Statement; } Lưu ý, nên khai báo destructor class có biến kiểu trỏ (array, string) Để giải phóng nhớ, ta dùng lệnh delete với biến VD : ref class Sinh_vien { public : // Variable : String^ Ho_ten; String^ Que_quan; String^ Nganh_hoc; // Destructor : ~Sinh_vien () { delete Ho_ten; delete Que_quan; delete Nganh_hoc; } … }; 5) Toán tử (Operator) : Ta định nghĩa tốn tử (operator) class để thực tính toán đối tượng class C++/CLI cho phép định nghĩa tốn tử ngơi (unary) hai ngơi (Binary) class Tốn tử ngơi (Unary Operator) : Bộ mơn Cơ điện tử Trang 13 Lập trình ứng dụng kỹ thuật Cú pháp : Chương static Class_name^ operator *(const Class_name ^ A) { Statement; } Trong “*” kí hiệu tốn tử định nghĩa A tên toán hạng C++/CLI hỗ trợ kí hiệu tốn tử sau : + | ~ * ! / = % < ^ > & += *= = %= == ^= != |= > && || ++ , VD : Đoạn mã sau xây dựng Class Complex quản lí đối tượng số phức (có dạng a + bj) Mỗi đối tượng đặc trưng biến : Re (phần thực) Im (phần ảo) Trong Class có định nghĩa tốn tử “-” tham số số phức A (a + bj) có chức trả số phức liên hợp A (a – bj) ref class Complex { public : // Variable : float Re; float Im; // Constructor : Complex (float a, float b) { Re = a; Im = b; } //Method : void Show() { Console::WriteLine(Re+ “ + ” + Im); } //Operator : static Complex^ operator - (const Complex^ A) Bộ môn Cơ điện tử Trang 14 Lập trình ứng dụng kỹ thuật Chương { Complex^ B = gcnew Complex(0,0); //Khởi tạo đối tượng B B->Re = A->Re; B->Im = -(B->Im); return B; } }; void main (void) { Complex^ A = gcnew Complex(5,10); //Khởi tạo số phức A = + 10j Complex^ B = -A; // Khởi tạo số phức B số phức liên hợp A nhờ toán tử A->Show(); B->Show(); } Kết in hình : + 10j + -10j Tốn tử hai ngơi (Binary Operator) : Cú pháp : static Class_name^ operator *(const Class_name ^ A, const Class_name ^ B) { Statement; } Trong “*” kí hiệu tốn tử định nghĩa; A, B toán hạng phép toán + | *= = * ! %= == / = ^= != || ++ % < |= = & += >> && , VD : Đoạn mã sau định nghĩa tốn tử “+” cho Class Complex có chức cộng hai số phức ref class Complex { public : // Variable : float Re; Bộ môn Cơ điện tử Trang 15 Lập trình ứng dụng kỹ thuật Chương float Im; // Constructor : Complex (float a, float b) { Re = a; Im = b; } //Method : void Show() { Console::WriteLine(Re+ “ + ” + Im); } //Operator : static Complex^ operator + (const Complex^ A, const Complex^ B) { Complex^ C = gcnew Complex(0,0); //Khởi tạo đối tượng C C->Re = A->Re + B->Re; C->Im = A->Im + B->Im; return C; } }; void main (void) { Complex^ A = gcnew Complex(5,10); //Khởi tạo số phức A = + 10j Complex^ B = gcnew Complex(7,-10); Complex^ C = A + B; A->Show(); B->Show(); C->Show(); } Kết in hình : + 10j + -10j 12 + 0j 6) Class thừa kế (Nested Class) : Bộ môn Cơ điện tử Trang 16 Lập trình ứng dụng kỹ thuật Chương Class thừa kế hay class class khai báo bên class khác Class chứa class gọi class sở hay class dẫn xuất Cú pháp khai báo class tương tự class thông thường Cú pháp ref class { public: ref { Class_name1 class // Khai báo class dẫn xuất Class_name2 Statement; // Khai báo class // Đoạn mã class }; Statement; // Đoạn mã class cha }; VD : ref class Hinh_tron { public : // Variable : UInt16 R; // Method : UInt16 Chu_vi() { return 2*(Math::PI)*R; } UInt16 Dien_tich() { return (Math::PI)*R*R; } ref class Hinh_vuong { public : // Variable : UInt16 a; // Method : UInt16 Chu_vi() Bộ môn Cơ điện tử Trang 17 Lập trình ứng dụng kỹ thuật Chương { return 4*a; } UInt16 Dien_tich() { return a*a; } }; }; Sử dụng Nested Class: Trong chương trình (hàm main()), để tạo đối tượng từ ref class khai báo, ta phải truy xuất thông qua class cha Cách : Dùng Handle^ : Cú pháp : Class_name1::Class_name2^ name = gcnew Class_name1::Class_name2(); Lưu ý : Nếu class có khai báo constructor, tạo đối tượng ta phải theo cấu trúc constructor VD : Hinh_tron::Hinh_vuong^ A = gcnew Hinh_tron::Hinh_vuong(10); Để truy xuất đến biến phương thức ref class, ta dùng toán tử “->” A->a = 5; // Gán giá trị cho thuộc tính a đối tượng UInt16 x = A->Chu_vi(); UInt16 y = A->Dien_tich(); VD : // x = 20 // y = 25 Cách : Dùng stack : Cú pháp : Class_name1::Class_name2 name ; VD : Hinh_tron::Hinh_vuong A(5) ; // name tên đối tượng // Tạo đối tượng hình trịn A Để truy xuất đến biến phương thức ref class, ta dùng toán tử “.” A.R = 5; // Gán giá trị cho thuộc tính R đối tượng UInt16 x = A.Chu_vi(); VD : // x = 20 Bộ mơn Cơ điện tử Trang 18 Lập trình ứng dụng kỹ thuật Chương UInt16 y = A.Dien_tich(); // y = 25 Quay trở lại ví dụ class Hinh_vuong class Class Hinh_tron khai báo, hàm main() VD : void main() { Hinh_tron^ A = gcnew Hinh_tron(10); Console::WriteLine("Chu vi hinh tron A: " + A->Chu_vi()); Hinh_tron::Hinh_vuong^ B = gcnew Hinh_tron::Hinh_vuong(25); Hinh_tron::Hinh_vuong C(25); Console::WriteLine("Chu vi hinh vuong B: " + B->Chu_vi()); Console::WriteLine("Chu vi hinh vuong C: " + C.Chu_vi()); Console::ReadKey(); } Kết in hình Bộ mơn Cơ điện tử : Chu vi hinh tron A : 62 Chu vi hinh vuong B : 100 Chu vi hinh vuong C : 100 Trang 19 ... Complex^ operator - (const Complex^ A) Bộ môn Cơ điện tử Trang 14 Lập trình ứng dụng kỹ thuật Chương { Complex^ B = gcnew Complex(0,0); //Khởi tạo đối tượng B B->Re = A->Re; B->Im = -( B->Im); return... class Sinh_vien { Bộ môn Cơ điện tử Trang Lập trình ứng dụng kỹ thuật Chương public: String^ Ho_ten; UInt32 MSSV; String^ Nganh_hoc; … // biến thành viên }; Trong chương trình chính, muốn truy... Complex^ C = A + B; A->Show(); B->Show(); C->Show(); } Kết in hình : + 10j + -1 0j 12 + 0j 6) Class thừa kế (Nested Class) : Bộ môn Cơ điện tử Trang 16 Lập trình ứng dụng kỹ thuật Chương Class thừa

Ngày đăng: 29/06/2014, 02:20

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan