Lập trình hướng đối tượng - Khái niệm về lớp

7 9 0
Lập trình hướng đối tượng - Khái niệm về lớp

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

Thông tin tài liệu

[r]

(1)

Chương 3 Khái ni m v l p ề ớ

Nh nói trên, l p khái ni m trung tâm c a l p trìnhư ệ ủ ậ

hướng đ i tố ượng, s m r ng c a khái ni m c u trúcự ộ ủ ệ ấ

(struct) c a C b n ghi (record) c a PASCAL Ngoài thànhủ ả ủ

ph n d li u (nh c u trúc), l p ch a ầ ữ ệ ấ ứ thành ph n hàm ,ầ

còn g i phọ ương th c (method) hay hàm thành viên (memberứ

function) Cũng gi ng nh c u trúc, l p có th xem nh m t ki uố ấ ể ộ ể

d li u Vì v y l p cịn g i ki u đ i tữ ệ ậ ọ ể ố ượng l p đớ ược dùng đ khai báo bi n, m ng đ i tể ế ả ố ượng (nh th dùng ki u int đư ể ể ể

khai báo bi n m ng nguyên) Nh v y t m t l p có th t o raế ả ậ ộ ể

(b ng cách khai báo) nhi u đ i tằ ề ố ượng (bi n, m ng) khác nhau.ế ả

M i đ i tỗ ố ượng có vùng nh riêng c a Vì v y có thớ ủ ậ ể

quan ni m l p t p h p đ i tệ ậ ợ ố ượng ki u.ể

Chương s trình b y cách đ nh nghĩa l p, cách xây d ngẽ ầ ị ự

phương th c, gi i thích v ph m vi truy nh p, s d ng thànhứ ả ề ậ ụ

ph n c a l p, cách khai báo bi n, m ng c u trúc, l i g i t i cácầ ủ ế ả ấ ọ

phương th c.ứ

§ Đ nh nghĩa l pị L p đớ ược đ nh nghĩa theo m u:ị ẫ

class tên_l pớ

{

// Khai báo thành ph n d li u (thu c tính)ầ ữ ệ ộ

// Khai báo phương th

} ;

// Đ nh nghĩa (xây d ng) phị ự ương th Chú ý:

Thu c tính c a l p có th bi n, m ng, tr có ki uộ ủ ể ế ả ỏ ể

chu n (int, float, char, char*, long, ) ho c ki u ngoàiẩ ặ ể chu n đãẩ

đ nh nghĩa trị ước (c u trúc, h p, l p, ) Thu c tính c a l p khơngấ ợ ộ ủ

th có ki u c a l p đó, nh ng có th ki u tr l pể ể ủ ể ể ỏ

này, ví d :ụ

class A {

A x ; // Không cho phép, x có ki u l p Aể

A *p ; // Cho phép , p tr ki u l p Aỏ ể

} ;

2 Khi báo thành ph n c a l p (thu c tính phầ ủ ộ ương th c)ứ

có th dùng t khố private public đ quy đ nh ph m vi sể ể ị

d ng c a thành ph n N u không quy đ nh c th (không dùngụ ủ ầ ế ị ụ ể

các t khố private public) C++ hi u private ể

Các thành ph n private (riêng) ch đầ ỉ ượ ục s d ng bên l pớ

(trong thân c a phủ ương th c c a l p) Các hàm không ph i làứ ủ ả

phương th c c a l p không đứ ủ ược phép s d ng thành ph nử ụ ầ

này

Các thành ph n public (công c ng) đầ ộ ược phép s d ng c bênử ụ ả

trong bên l p.ớ

3 Các thành ph n d li u thầ ữ ệ ường (nh ng không b t bu c) khaiư ắ ộ

báo private đ b o đ m tính gi u kín, b o v an tồn d li uể ả ả ấ ả ệ ữ ệ

c a l p, không cho phép hàm bên xâm nh p vào d li uủ ậ ữ ệ

c a l p.ủ

4 Các phương th c thứ ường khai báo public đ chúng ể

được g i t i (s d ng) t hàm khác chọ ụ ương trình

5 Các phương th c có th đứ ể ược xây d ng bên ho c bênự ặ

trong đ nh nghĩa l p Thông thị ường, phương th c ng n đứ ắ ược vi t bên đ nh nghĩa l p, phế ị ương th c dài vi t bênứ ế

ngoài đ nh nghĩa l p.ị

6 Trong thân phương th c c a m t l p (gi s l p A) có thứ ủ ộ ả ể

s d ng:ử ụ

+ Các thu c tính c a l p Aộ ủ

(2)

+ Các phương th c c a l p Aứ ủ

+ Các hàm t l p chự ậ ương trình Vì ph m vi s d ng c aạ ụ ủ

hàm tồn chương trình

7 Giá tr tr v c a phị ả ề ủ ương th c có th có ki u b t kỳ (chu nứ ể ể ấ ẩ

và ngồi chu n)ẩ

Ví dụ sau s minh ho u nói Chúng ta s đ nh nghĩaẽ ề ẽ ị

l p đ mô t x lý m hình đ ho L p đớ ể ả ể ược đăt tên DIEM

+ Các thu c tính c a l p g m:ộ ủ

int x ; // hoành đ (c t)ộ ộ

int y ; // tung đ (hàng)ộ

int m ; // m uầ

+ Các phương th c:ứ

Nh p d li u m t mậ ữ ệ ộ ể

Hi n th m t mể ị ộ ể

n m t m

ẩ ộ ể

L p m đớ ể ược xây d ng nh sau:ự

class DIEM {

private: int x, y, m ; public:

void nhapsl() ; void hien() ; void an()

{

putpixel(x, y, getbkcolor()); }

} ;

void DIEM::nhap() {

cout << “\nNh p hoành đ (c t) tung đ (hàng) c a m:ậ ộ ộ ộ ủ ể

cin >> x >> y ;

cout << “\nNh p mã m u c a m: “ ậ ầ ủ ể

cin >> m ; }

void DIEM::hien() {

int mau_ht ;

mau_ht = getcolor(); putpixel(x, y, m); setcolor(mau_ht); }

Qua ví d có th rút m t s u c n nh sau:ụ ể ộ ố ề ầ

+ Trong c phả ương th c (dù vi t hay vi t đ nhứ ế ế ị

nghĩa l p) đ u đớ ề ược phép truy nh p đ n thu c tính x, y mậ ế ộ

c a l p.ủ

+ Các phương th c vi t bên đ nh nghĩa l p (nh phứ ế ị ương th c an() ) đứ ược vi t nh m t hàm thông ộ ường

+ Khi xây d ng phự ương th c bên l p, c n dùng thêmứ ầ

tên l p toán t ph m vi :: đ t trớ ặ ước tên phương ph c đứ ể

quy đ nh rõ phị ương th c c a l p nào.ứ ủ § Bi n, m ng đ i tế ố ượng

Nh nói trên, m t l p (sau đ nh nghĩa) có th xem ộ ị ể

m t ki u đ i tộ ể ố ượng có th dùng đ khai báo bi n, m ngể ể ế ả

đ i tố ượng Cách khai báo bi n, m ng đ i tế ả ố ượng gi ng nhố

(3)

khai báo bi n, m ng kiế ả ểu khác (nh int, float, c u trúc,ư ấ

h p, ), theo m u sau:ợ ẫ

Tên_l p danh sách đ i ;ớ ố

Tên_l p danh sách m ng ;ớ ả

Ví dụ s d ng l p DIEM ử ụ ở§1, có th khai báo bi n, m ngể ế ả

DIEM nh sau:ư

DIEM d1, d2, d3 ; // Khai báo bi n đ i tế ố ượng d1, d2, d3 DIEM d[20] ; // Khai báo m ng đ i tả ố ượng d g m 20 ph nồ ầ

tử

M i đ i tỗ ố ượng sau khai báo s đẽ ượ ấc c p phát m t vùng nhộ

riêng đ ch a thu c tính c a chúng Chú ý r ng s khơng cóể ứ ộ ủ ằ ẽ

vùng nh riêng đ ch a phớ ể ứ ương th c cho m i đ i tứ ỗ ố ượng Các phương th c s đứ ẽ ược s d ng chung cho t t c đ i tử ụ ấ ả ố ượng l p Nh v y v b nh đớ ậ ề ộ ược c p phát đ i tấ ố ượng gi ngố

c u trúc Trong trấ ương h p này:ợ

sizeof(d1) = sizeof(d2) = sizeof(d3) = 3*sizeof(int) = sizeof(d) = 20*6 = 120

Thu c tính c a đ i tộ ố ượng:

Trong ví d trên, ụ m i đ i tỗ ố ượng d1, d2, d3 m i ph n t d[i]ỗ ầ

đ u có thu c tính x, y, m Chú ý m i thu c đ u thu c ộ ỗ ộ ề ộ ề

m t đ i tộ ố ượng, v y khơng th vi t tên thu c m t cách riêng rậ ể ế ộ ộ ẽ

mà bao gi ph i có tên đ i tờ ả ố ượng kèm, gi ng nh cách vi tố ế

trong c u trúc c a C hay b n ghi c a PASCAL Nói cách khác,ấ ủ ả ủ

cách vi t thu c tính c a đ i tế ộ ủ ố ượng nh sau:ư

tên_đ i_tố ượng.Tên_thu c_tính ộ

V i đ i tớ ố ượng d1, d2, d3 m ng d, có th vi t nh sau:ả ể ế

d1.x // Thu c tính x c a đ i tộ ủ ố ượng d1 d2.x // Thu c tính x c a đ i tộ ủ ố ượng d2 d3.y // Thu c tính y c a đ i tộ ủ ố ượng d3 d[2].m // Thu c tính m c a ph n t d[2]ộ ủ ầ

d1.x = 100 ; // Gán 100 cho d1.x d2.y = d1.x; // Gán d1.x cho d2.y

S d ng phử ụ ương th cứ

Cũng gi ng nh hàm, m t phố ộ ương th c đứ ược s d ng thôngử ụ

qua l i g i Tuy nhiênờ ọ l i g i phờ ọ ương th c bao gi cũngứ

ph i có tên đ i tả ố ượng đ ch rõ phể ỉ ương th c th c hi n cácứ ự ệ

thu c tính c a đ i tộ ủ ố ượng Ví d l i g i:ụ ọ

d1.nhapsl();

s th c hi n nh p s li u vào thành ph n d1.x, d1.y d1.m ẽ ự ệ ậ ố ệ ầ

Câu l nhệ

d[3].nhapsl() ;

s th c hi n nh p s li u vào thành ph n d[3].x, d[3].y vàẽ ự ệ ậ ố ệ ầ

d[3].m

Chúng ta s minh ho u nói b ng m t chẽ ề ằ ộ ương trình đ n gi n s d ng l p DIEM đ nh p m, hi n r i n cácơ ả ụ ể ậ ể ệ ẩ

đi m v a nh p Trong chể ậ ương trình đ a vào hàm kd_do_hoa()ư

dùng đ kh i đ ng h đ ho ể ộ ệ

#include <conio.h> #include <iostream.h> #include <graphics.h> class DIEM

{

private: int x, y, m ; public:

void nhapsl(); void an()

{

putpixel(x,y,getbkcolor());

(4)

}

void hien(); };

void DIEM::nhapsl() {

cout << "\nNhap hoanh (cot) va tung (hang) cua diem: " ;

cin >> x >> y ;

cout << " \nNhap ma mau cua diem: " ; cin >> m ;

}

void DIEM::hien() {

int mau_ht;

mau_ht = getcolor() ; putpixel(x,y,m); setcolor(mau_ht); }

void kd_do_hoa() {

int mh, mode ; mh=mode=0;

initgraph(&mh, &mode, ""); }

void main() {

DIEM d1, d2, d3 ;

d1.nhapsl(); d2.nhapsl(); d3.nhapsl(); kd_do_hoa();

setbkcolor(BLACK); d1.hien();

d2.hien(); d3.hien(); getch(); d1.an(); d2.an(); d3.an(); getch(); closegraph(); }

§ Con tr đ i tỏ ố ượng

Con tr đ i tỏ ố ượng dùng đ ch a đ a ch c a bi n, m ng đ iể ứ ị ỉ ủ ế ả ố

tượng Nó khai báo nh sau:ư

Tên_l p *con tr ;ớ ỏ

Ví dụ dùng l p DIEM có th khai báo: ớ ể

DIEM *p1 , *p2, *p3 ; // khai báo tr p1, p2, p3ỏ

DIEM d1, d2 ; // Khai báo đ i tố ượng d1, d2 DIEM d[20] ; // Khai báo m ng đ i tả ố ượng có th th c hi n câu l nh:ể ự ệ ệ

p1 = &d2 ; // p1 ch a đ a ch c a d2 , hay p1 tr t i d2ứ ị ỉ ủ ỏ

p2 = d ; // p2 tr t i đ u m ng dỏ ầ ả

(5)

p3 = new DIEM // T o m t đ i tạ ộ ố ượng ch a đ a ch c a ứ ị ỉ ủ

// vào p3

Đ s d ng thu c tính c a đ i tể ụ ộ ủ ố ượng thông qua tr , ta vi tỏ ế

nh sau:ư

Tên_con_tr ->Tên_thu c_tínhỏ ộ

Chú ý: N u tr ch a đ a ch đ u c a m ng, có th dùngế ỏ ứ ị ỉ ầ ủ ả ể

con tr nh tên m ng ỏ ả

Nh v y sau th c hi n câu l nh thì:ư ậ ự ệ ệ

p1->x d2.x nh nhauư

p2[i].y d[i].y nh nhauư Tóm l i ta có quy t c sauạ

Quy t c s d ng thu c tính:ắ ụ Đ s d ng m t thu c tính c aể ụ ộ ộ ủ

đ i tố ượng ta ph i dùng phép ho c phép -> Trong chả ặ ương trình, khơng cho phép vi t tên thu c tính m t cách đ n đ c mà ph i điế ộ ộ ộ ả

kèm tên đ i tố ượng ho c tên tr theo m u sau:ặ ỏ ẫ

Tên_đ i_tố ượng.Tên_thu c_tínhộ

Tên_con_tr ->Tên_thu c_tínhỏ ộ

Tên_m ng_đ i_tả ố ượng[ch _s ].Tên_thu c_tínhỉ ố ộ

Tên_con_tr [ch _s ].Tên_thu c_tínhỏ ỉ ố ộ

Chương trình s d ng l p DIEM (trong ụ §1) để

nh p m t d y m, hi n th n m v a nh p Chậ ộ ẫ ể ể ị ẩ ể ậ ương trình dùng m t tr ki u DIEM dùng toán t new đ t o raộ ỏ ể ể

m t d y đ i tộ ẫ ố ượng #include <conio.h> #include <iostream.h> #include <graphics.h> class DIEM

{

private:

int x, y, m ; public:

void nhapsl(); void an()

{

putpixel(x,y,getbkcolor()); }

void hien(); };

void DIEM::nhapsl() {

cout <<"\nNhap hoanh (cot) va tung (hang) cua diem:" ; cin >> x >> y ;

cout << " \nNhap ma mau cua diem: " ; cin >> m ;

}

void DIEM::hien() {

int mau_ht;

mau_ht = getcolor() ; putpixel(x,y,m); setcolor(mau_ht); }

void kd_do_hoa() {

int mh, mode ; mh=mode=0;

initgraph(&mh, &mode, "");

(6)

is >> d.a[i] ; }

return is; }

DT DT::operator-() {

DT p; p.n = n;

p.a = new double[n+1]; for (int i=0 ; i<=n ; ++i)

p.a[i] = -a[i]; return p; }

DT DT::operator+(const DT &d2) {

DT d; int k,i;

k = n > d2.n ? n : d2.n ; d.a = new double[k+1]; for (i=0; i<=k ; ++i)

if (i<=n && i<=d2.n) d.a[i] = a[i] + d2.a[i]; else if (i<=n)

d.a[i] = a[i]; else

d.a[i] = d2.a[i]; i=k;

while(i>0 && d.a[i]==0.0) i;

d.n = i; return d ; }

DT DT::operator-(DT d2) {

return (*this + (-d2)); }

DT DT::operator*(const DT &d2) {

DT d; int k, i, j;

k = d.n = n + d2.n ; d.a = new double[k+1]; for (i=0; i<=k; ++i) d.a[i] = 0; for (i=0 ; i<= n ; ++i)

for (j=0 ; j<= d2.n ; ++j) d.a[i+j] += a[i]*d2.a[j] ; return d;

}

double DT::operator^(const double &x) {

double s=0.0 , t=1.0; for (int i=0 ; i<= n ; ++i)

{

s += a[i]*t; t *= x; }

(7)

return s; }

void main() {

DT p,q,r,s,f;

double x1,x2,g1,g2; clrscr();

cout <<"\nNhap da thuc P " ; cin >> p; cout << "\nDa thuc p " << p ;

cout <<"\nNhap da thuc Q " ; cin >> q; cout << "\nDa thuc q " << q ;

cout <<"\nNhap da thuc R " ; cin >> r; cout << "\nDa thuc r " << r ;

cout <<"\nNhap da thuc S " ; cin >> s; cout << "\nDa thuc s " << s ;

f = -(p+q)*(r-s);

cout << "\nNhap so thuc x1: " ; cin >> x1; cout << "\nNhap so thuc x2: " ; cin >> x2; g1 = f^x1;

g2 = F(f,x2);

cout << "\nDa thuc f " << f ;

cout << "\n f("<<x1<<") = " << g1; cout << "\n f("<<x2<<") = " << g2; getch();

} 147 148

Ngày đăng: 09/03/2021, 06:07

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

Tài liệu liên quan