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); } }; 11 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Thựchiện trong C++: LớpTextbox #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) {} void draw() { Rectangle::draw(); std::cout << Text << '\n'; } }; 12 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Chương trình minh họa #include "Rectangle.h" #include "Square.h" #include "TextBox.h" #include <conio.h> void main() { Rectangle rect(0,50,0,100); Square square(0,0,50); TextBox text("Hello"); rect.draw(); std::cout << "\t Rect area: " << rect.area(); square.draw(); std::cout << "\t Square area: " << square.area(); text.draw(); std::cout << "\t Textbox area: " << text.area(); 13 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT getch(); std::cout << "\n\nNow they are moved "; rect.move(10,20); square.move(10,20); text.move(10,20); getch(); std::cout << "\n\nNow they are resized "; rect.resize(2,2); square.resize(2); text.resize(2,2); getch(); } 14 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Truy nhập thành viên Cáchàmthànhviêncủalớpdẫnxuấtcóthể truy nhậpthành viên "protected" ₫ịnh nghĩa ở lớpcơ sở, nhưng cũng không thể truy nhập các thành viên "private" ₫ịnh nghĩa ở lớpcơ sở Phảnvídụ: Rectangle rect(0,0,50,100); Square square(0,0,50); square.TL = 10; Lớpdẫnxuất ₫ược"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 public) Quyềntruynhậpcủa các thành viên "public" và "protected" ở lớpdẫnxuất ₫ượcgiữ nguyên trong lớpcơ sở 15 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT 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 class Y: private X class Y: public X private Được kế thừa nhưng các thành 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 viên protected của Y và có thể truy nhập trong Y public 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ẽ trở thành thành viên public của Y và có thể truy nhập trong Y 16 © 2004, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 2007 AC - HUT Ví dụ void func2(int a, int b) { } int xy; class X { private: int x1; protected: int x2; public: int x3; int xy; X(int a, int b, int c) { x1 = a; x2 = b; x3 = xy = c; } void func1(int, int); void func2(int, int); }; void X::func1(int i, int j) { } void X::func2(int k, int l) { } . "; rect.resize (2, 2); square.resize (2) ; text.resize (2, 2); getch(); } 14 © 20 04, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 20 07 AC - HUT Truy nhập thành viên Cáchàmthànhviêncủalớpdẫnxuấtcóthể truy. 9 © 20 04, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 20 07 AC - HUT Rectangle(int x1=0, int y1=0, int x2=10, int y2=10) : TL(x1,y1), BR(x2,y2), LineColor (25 6),FillColor(0) {} Rectangle(const. text.area(); 13 © 20 04, HOÀNG MINH SƠN Chương 7: Quan hệ lớp © 20 07 AC - HUT getch(); std::cout << " Now they are moved "; rect.move(10 ,20 ); square.move(10 ,20 ); text.move(10 ,20 ); getch(); std::cout