1. Trang chủ
  2. » Hoá học lớp 11

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

7 10 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 110,32 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

[r]

Trang 1

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

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

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

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

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

còn g i là 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 là ki u đ i tữ ệ ậ ớ ọ ể ố ượng và l p đớ ược dùng

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

khai báo các 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 mình Vì v y cũng có thớ ủ ậ ể

quan ni m l p là t p h p các đ i tệ ớ ậ ợ ố ượng cùng ki u.ể

Chương này 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 các 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.ứ

§ 1 Đ nh nghĩa l p ị ớ

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

class tên_l pớ

{

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

// Khai báo các phương th cứ

} ;

// Đ nh nghĩa (xây d ng) các phị ự ương th cứ

Chú ý:

Thu c tính c a l p có th là các bi n, m ng, con 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 chính l p đó, nh ng có th là ki u con tr l pể ể ủ ớ ư ể ể ỏ ớ này, ví d :ụ

class A {

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

A *p ; // Cho phép , vì p là con tr ki u l p Aỏ ể ớ

} ;

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

có th dùng các t khoá private và public đ quy đ nh ph m vi sể ừ ể ị ạ ử

d ng c a các thành ph n N u không quy đ nh c th (không dùngụ ủ ầ ế ị ụ ể các t khoá private và public) thì C++ hi u đó là private ừ ể

Các thành ph n private (riêng) ch đầ ỉ ượ ử ục s d ng bên trong l pớ (trong thân c a các 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 các 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 và bên ngoài 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 là private đ b o đ m tính gi u kín, b o v an toàn d li uể ả ả ấ ả ệ ữ ệ

c a l p, không cho phép các hàm bên ngoài 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 là public đ chúng có thể ể

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

5 Các phương th c có th đứ ể ược xây d ng bên ngoài ho c bênự ặ trong đ nh nghĩa l p Thông thị ớ ường, các phương th c ng n đứ ắ ượ c

vi t bên trong đ nh nghĩa l p, còn các phế ị ớ ương th c dài thì 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ộ ủ ớ

Trang 2

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

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

hàm là toà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à ngoài chu n)ẩ

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

l p đ mô t và x lý các đi m trên màn hình đ ho L p đớ ể ả ử ể ồ ạ ớ ượ c

đăt tên là 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 đi mậ ữ ệ ộ ể

Hi n th m t đi mể ị ộ ể

n m t đi m

L p đi 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) và tung đ (hàng) c a đi m:ậ ộ ộ ộ ủ ể

“ cin >> x >> y ; cout << “\nNh p mã m u c a đi m: “ ậ ầ ủ ể cin >> m ;

} void DIEM::hien() {

int mau_ht ; mau_ht = getcolor();

putpixel(x, y, m);

setcolor(mau_ht);

} Qua ví d trên có th rút ra m t s đi u c n nh sau:ụ ể ộ ố ề ầ ớ + Trong c 3 phả ương th c (dù vi t trong hay vi t ngoài đ nhứ ế ế ị nghĩa l p) đ u đớ ề ược phép truy nh p đ n các thu c tính x, y và mậ ế ộ

c a l p.ủ ớ + Các phương th c vi t bên trong đ nh nghĩa l p (nh phứ ế ị ớ ư ươ ng

th c an() ) đứ ược vi t nh m t hàm thông thế ư ộ ường

+ Khi xây d ng các phự ương th c bên ngoài l p, c n dùng thêmứ ớ ầ tên l p và toán t ph m vi :: đ t ngay trớ ử ạ ặ ước tên phương ph c đứ ể quy đ nh rõ đây là phị ương th c c a l p nào.ứ ủ ớ

§ 2 Bi n, m ng đ i t ế ả ố ượ ng

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

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

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

Trang 3

khai báo bi n, m ng các 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 các bi n, m ngể ế ả

DIEM nh sau:ư

DIEM d1, d2, d3 ; // Khai báo 3 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 khi khai báo s đẽ ượ ấc c p phát m t vùng nhộ ớ

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

vùng nh riêng đ ch a các 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 các đ i tử ụ ấ ả ố ượ ng

cùng l p Nh v y v b nh đớ ư ậ ề ộ ớ ược c p phát thì đ 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) = 6

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 và m i ph n t d[i]ỗ ầ ử

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

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

mà bao gi cũng ph i có tên đ i tờ ả ố ượng đi 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 các đ i tớ ố ượng d1, d2, d3 và 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 các 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ờ ọ trong 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 trên cácứ ự ệ thu c tính c a đ i tộ ủ ố ượng nào Ví d l i g i:ụ ờ ọ

d1.nhapsl();

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

d[3].nhapsl() ;

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

Chúng ta s minh ho các đi u nói trên b ng m t chẽ ạ ề ằ ộ ương trình

đ n gi n s d ng l p DIEM đ nh p 3 đi 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());

Trang 4

void hien();

};

void DIEM::nhapsl()

{

cout << "\nNhap hoanh do (cot) va tung do (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();

}

§ 3 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ó được 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 3 con tr p1, p2, p3ỏ DIEM d1, d2 ; // Khai báo 2 đ i tố ượng d1, d2

DIEM d[20] ; // Khai báo m ng đ i tả ố ượng

và có th th c hi n các 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ỏ ớ ầ ả

Trang 5

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

// vào p3

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

nh sau:ư

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

Chú ý: N u con 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 khi th c hi n các câu l nh trên thì:ư ậ ự ệ ệ

p1->x và d2.x là nh nhauư

p2[i].y và d[i].y là 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 con tr theo các 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 dưới đây cũng s d ng l p DIEM (trong ử ụ ớ §1) để

nh p m t d y đi m, hi n th và n các đi m v a nh p Chậ ộ ẫ ể ể ị ẩ ể ừ ậ ươ ng

trình dùng m t con tr ki u DIEM và 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 do (cot) va tung do (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, "");

Trang 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;

}

Trang 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();

149

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

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w