Tài liệu Kỹ thuật lập trình - Chương 7: Quan hệ lớp - Pdf 97

© 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

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
©

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;

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

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
©

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:

}
void func2(int, int);
};
void Y::func2(int m, int n)
{
int a, b;
x1 = m; //
Error, x1 is private in the basic class X
x2 = m;
x3 = m;
xy = m;
X::xy = m;
::xy = m;
y1 = n;
y2 = n;
18
© 2004, HOÀNG MINH SƠN
Chương 7: Quan hệ lớp
©
2007 AC - HUT
func1(a,b); OK, X::func1( )
X::func2(a,b); OK, X::func2( )
::func2(a,b)
}
void f()
{
const int a = 12;
Y objY(3, 4, 5, 6, 7);
objY.x1 = a; //
Error, x1 is private

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.
20
© 2004, HOÀNG MINH SƠN
Chương 7: Quan hệ lớp
©
2007 AC - HUT
Chuyển ₫ổikiểu ₫ốitượng
Ví dụ:
class X {
public:
int x;
};
class Y:private X {
};
void f()
{
Y objY;
X *xp;
xp = &objY; //Error
xp = (X*) &objY;
xp->x = 5;
}
21
© 2004, HOÀNG MINH SƠN
Chương 7: Quan hệ lớp
©
2007 AC - HUT
7.3 Hàm ảovàcơ chế₫a hình/₫axạ
 Trong quá trình liên kết, lời gọi các hàm và hàm thành viên

2007 AC - HUT
Chương trình minh họa1
void main()
{
Rectangle rect(0,0,50,100);
Square square(0,0,50);
TextBox text("Hello");
rect.draw();
square.draw();
text.draw();
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();
}
24
© 2004, HOÀNG MINH SƠN
Chương 7: Quan hệ lớp
©
2007 AC - HUT
Kếtquả: Như ý muốn?
Rectangle: [(0,0)(50,100)]
Square: [(0,0)(50,50)]
Textbox: [(0,0)(10,10) Hello]
Now they are moved

Rectangle: [(0,0)(50,100)]
Rectangle: [(0,0)(50,50)]
Rectangle: [(0,0)(10,10)]


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status