1. Trang chủ
  2. » Công Nghệ Thông Tin

Kỹ thuật lập trình C phần 6 doc

33 245 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 33
Dung lượng 385,65 KB

Nội dung

© 2004, HOÀNG MINH SƠN Chương 1 Kỹ thuật lập trình 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 0101010101010101100001 0101010101010101100001 0101010101010101100001 0101010100101010100101 0101010100101010100101 0101010100101010100101 1010011000110010010010 1010011000110010010010 1010011000110010010010 1100101100100010000010 1100101100100010000010 1100101100100010000010 y = A*x + B*u; x = C*x + d*u; StateController start() stop() LQGController start() stop() Chương 7: Quan hệ lớp 12/3/2007 2 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Nộidung chương 7 7.1 Quan hệ lớp 7.2 Dẫnxuấtvàthừakế 7.3 Hàm ảo và nguyên lý ₫ahình/₫axạ 7.4 Ví dụ thư việnkhốichứcnăng 3 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT 7.1 Phân loạiquanhệ lớp  Ví dụ minh họa: Các lớp biểu diễn các hình vẽ trong một chương trình ₫ồ họa —Rectangle — Square — Ellipse — Circle —Line — Polygon — Polyline —Textbox —Group Textbox 4 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Biểu ₫ồ lớp (Unified Modeling L anguage) Quan hệ dẫnxuất Quan hệ chứa 5 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Các dạng quan hệ lớp (meta model) Class relationship Association Generalization Dependency Aggregation Composition 6 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT 7.2 Dẫnxuấtvàthừakế  Ví dụ xây dựng các lớp: Rectangle, Square và Textbox (sử dụng lớp Point) Lớpcơ sở Lớpdẫnxuất 7 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Thựchiện trong C++: LớpPoint class Point { int X,Y; public: Point() : X(0), Y(0) {} Point(int x, int y): X(x), Y(y) {} int x() const { return X; } int y() const { return Y; } void move(int dx, int dy) { X += dx; Y += dy; } void operator*=(int r) { X *= r; Y *= r; } }; Point operator-(const Point& P1, const Point& P2) { return Point(P2.x()-P1.x(),P2.y()-P1.y()); } 8 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Thựchiện trong C++: LớpRectangle #include <iostream> #include <string> #include "Point.h" typedef int Color; class Rectangle { Point TL, BR; Color LineColor, FillColor; int LineSize; public: Point getTL() const { return TL; } Point getBR() const { return BR; } void setTL(const Point& tl) { TL = tl; } void setBR(const Point& br) { BR = br; } Color getLineColor() const { return LineColor; } void setLineColor(Color c) { LineColor = c; } int getLineSize() const { return LineSize; } void setLineSize(int s) { LineSize = s; } 9 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Rectangle(int x1=0, int y1=0, int x2=10, int y2=10) : TL(x1,y1), BR(x2,y2), LineColor(256),FillColor(0) {} Rectangle(const Point& tl, const Point& br, Color lc, Color fc) : TL(tl), BR(br), LineColor(lc), FillColor(fc) {} void draw() { std::cout << "\nRectangle:\t[" << TL << BR << ']'; } void move(int dx, int dy) { TL.move(dx,dy); BR.move(dx,dy); draw(); } void resize(int rx, int ry) { TL *= rx; BR *= ry; draw(); } double area() const { Point d = BR - TL; int a = d.x()*d.y(); return a > 0 ? a : - a; } }; 10 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Thựchiện trong C++: LớpSquare #include "Rectangle.h" class Square : public Rectangle { public: Square(int x1=1, int y1=0, int a=10) : Rectangle(x1,y1,x1+a,y1+a) {} void resize(int r) { Rectangle::resize(r,r); } }; [...]... Một chương trình ứng dụng chứa nhiều kiểu ₫ối tượng (₫ối tượng thu c c c lớp kh c nhau, c thể c c ng kiểu c sở) => quản lý c c ₫ối tượng như thế nào, trong một danh sách hay nhiều danh sách kh c nhau? Chương 7: Quan hệ lớp © 2007 AC - HUT 21 Vấn ₫ề c a c chế "liên kết tĩnh" Xem lại chương trình trư c, hàm Rectangle::draw ₫ều in ra tên "Rectangle" => chưa hợp lý nên c n ₫ư c ₫ịnh nghĩa lại ở c c lớp... dụng tr c tiếp, mà phải qua c c phép toán (c c hàm c ng c ng ho c hàm public) Quyền truy nhập c a c c thành viên "public" và "protected" ở lớp dẫn xuất ₫ư c giữ nguyên trong lớp c sở Chương 7: Quan hệ lớp © 2007 AC - HUT 14 Thu c tính truy nhập kế thừa Thu c tính kế thừa c a lớp dẫn xuất Y Thu c tính truy nhập c a c c thành viên lớp c sở X private © 2004, HOÀNG MINH SƠN protected public Chương 7:... hệ lớp class Y: private X class Y: public X Đư c kế thừa nhưng c c thành viên c a X không thể truy nhập trong Y C c thành viên c a X sẽ trở thành c c thành viên private c a Y và c thể ₫ư c truy nhập trong Y C c thành viên c a X sẽ trở thành c c thành viên protected c a Y và c thể truy nhập trong Y Thành viên c a X sẽ trở thành thành viên private c a Y và c thể truy nhập trong Y Thành viên c a X sẽ... 5; } Chương 7: Quan hệ lớp © 2007 AC - HUT 20 7.3 Hàm ảo và c chế ₫a hình/₫a xạ Trong quá trình liên kết, lời gọi c c hàm và hàm thành viên thông thường ₫ư c chuyển thành c c lệnh nhảy tới ₫ịa chỉ c thể c a mã th c hiện hàm => "liên kết tĩnh" Vấn ₫ề th c tế: © 2004, HOÀNG MINH SƠN — C c ₫ối tượng ₫a dạng, m c dù giao diện giống nhau (phép toán giống nhau), nhưng c ch th c hiện kh c nhau => th c thi... Rectangle: [(10,20) (60 ,70)] Rectangle: [(10,20)(20,30)] © 2004, HOÀNG MINH SƠN Now they are resized Rectangle: [(20,40)(120,240)] Rectangle: [(20,40)(120,140)] Rectangle: [(20,40)(40 ,60 )] Gọi hàm draw() c a Rectangle! Chương 7: Quan hệ lớp © 2007 AC - HUT 24 Chương trình minh họa 2 void main() Quản lý c c ₫ối tượng { const N =3; chung trong một danh sách Rectangle rect(0,0,50,100); nhờ c chế dẫn xuất!...Th c hiện trong C+ +: Lớp Textbox © 2004, HOÀNG MINH SƠN #include "Rectangle.h" enum AlignType { Left, Right, Center}; class TextBox : public Rectangle { std::string Text; AlignType Align; public: TextBox(const string& text = "Text") : Text(text), Align (Left) {} TextBox(const Point& tl, const Point& br, Color lc, Color fc, const string& text): Rectangle(tl,br,lc,fc), Text(text), Align(Left)... //OK, but not guaranteed! Chuyển ₫ổi kiểu tự ₫ộng cho ₫ối tượng c kiểu lớp c sở sang kiểu lớp dẫn xuất sẽ không thể th c hiện vì không ₫ảm bảo ₫ư c quyền truy nhập c a c c thành viên c a lớp c sở, ch c chắn không ₫ư c nếu kế thừa private Chương 7: Quan hệ lớp © 2007 AC - HUT 19 Chuyển ₫ổi kiểu ₫ối tượng Ví dụ: class X { public: int x; }; class Y:private X { }; void f() { Y objY; © 2004, HOÀNG MINH... draw() { Rectangle::draw(); std::cout . Lớpdẫnxuất ₫ư c& quot;thừakế" c utrúcdữ liệu và c c phép toán ₫ã ₫ư c ₫ịnh nghĩatronglớpcơ sở, nhưng không nhấtthiếtcó quyềnsử dụng trựctiếp, mà phải qua c c phép toán (c c hàm c ng c ng ho c hàm. BR(x2,y2), LineColor(2 56) ,FillColor(0) {} Rectangle(const Point& tl, const Point& br, Color lc, Color fc) : TL(tl), BR(br), LineColor(lc), FillColor(fc) {} void draw() { std::cout <<. viên c a X không thể truy nhập trong Y protected C c thành viên c a X sẽ trở thành c c thành viên private c a Y và c thể ₫ư c truy nhập trong Y C c thành viên c a X sẽ trở thành c c thành

Ngày đăng: 12/08/2014, 19:21

TỪ KHÓA LIÊN QUAN