1. Trang chủ
  2. » Giáo án - Bài giảng

làm đề cương ôn tập môn kĩ thuật lập trình

63 1K 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 63
Dung lượng 82,46 KB

Nội dung

Cụ thể: • Hàm có trả về giá trị danh sách tham đối hình thức { khai báo cục bộ của hàm ; // chỉ dùng riêng cho hàm này nội dung của hàm; .return biểu thức trả về; // có thể nằm đâu đó

Trang 1

Đề cương ôn tập Kỹ thuật lập trình 2011

Phần 1: Lý thuyết

1 Trình bày cấu trúc một chương trình trong ngôn ngữ C

2 Trình bày cấu trúc một chương trình trong ngôn ngữ C++

3 Trình bày cấu trúc một hàm trong ngôn ngữ C/C++

4 Trình bày cách xây dựng kiểu dữ liệu cấu trúc

5 Trình bày và giải thích cách khai báo lớp trong C++

6 Trình bày về hàm tạo, hàm hủy trong lớp

7 Ý nghĩa các nhãn private, protected, public trong lớp

8 Cách khai báo đơn thừa kế

1

4 5 + +

1

2n(2n+1) với n là một số nguyên nhập từ

bàn phím (biểu thức S có thể khác-xem các bài tập trên lớp)

2 Bạn cho biết giá trị của biến s và biến i sau khi thực hiện xong đoạn mã sau:

3 Viết hàm đổi một số từ hệ 10 sang hệ 8 Sau đó, đổi tất cả các số trong đoạn [a, b] ở

hệ 10 sang hệ 8 (có thể là đổi từ hệ 10 sang hệ 2, ….)

Trang 2

5 Viết hàm kiểm tra x có là số nguyên tố không Tìm các số nguyên tố trong đoạn [a,

b] Hoặc tìm các số nguyên tố trong mảng a có n phần tử

6 Viết hàm kiểm tra số x có là số hoàn hảo không Tìm các số hoàn hảo trong mảng a

có n phần tử

7 Viết chương trình thực hiện các công việc sau:

a) Khai báo cấu trúc mô tả hàng hóa gồm các thông tin:

- Tên mặt hàng

- Số lượng trong kho

- Giá bán

b) In ra các mặt hàng có lãi >500000 và số lượng >100(lãi=giá bán*10%)

c) In ra các mặt hàng có số lượng trong kho >100 và giá bán <1000000

d) Sắp xếp các mặt hàng theo chiều tăng dần của tên

8 Viết chương trình thực hiện các công việc sau:

a) Khai báo cấu trúc mô tả nhân viên gồm các thông tin:

- Tên nhân viên

- Hệ số lương

- Chức vụ

b) In ra các nhân viên có chức vụ không phải là trưởng phòng và có hệ số lương>5.0//chú ý: Các cấu trúc có thể là NV, SV, …

9 Xây dựng lớp sinh viên có dữ liệu gồm họ tên, mã (kiểu xâu ký tự), điểm môn cơ sở,

môn chuyên ngành (kiểu thực) Các phương thức khởi tạo, nhập, hiển thị và hàm bạnsắp xếp danh sách sinh viên theo chiều tăng của điểm chuyên ngành Viết hàm main()thực hiện nhập danh sách n sinh viên và sắp xếp danh sách đó

//chú ý: Các lớp có thể thay đổi như lớp mặt hàng, lớp phần mềm,

Đề thi mẫu:

Câu 1 (1,5 điểm)

2

Trang 3

a) Hàm bạn là gì, có mấy loại, nêu ví dụ.

while(i>0){ s+=3*i; i+=4;if(i%6==0)break;}

b) Bạn cho biết giá trị của biến s sau khi thực hiện xong đoạn mã sau:

Câu 4 (2 điểm) Viết chương trình thực hiện các công việc sau:

a) Khai báo cấu trúc mô tả nhân viên gồm các thông tin:

- Họ tên nhân viên

3

Trang 4

1.Trình bày cấu trúc một chương trình trong ngôn ngữ C

2.Trình bày cấu trúc một chương trình trong ngôn ngữ C++

3.Trình bày cấu trúc một hàm trong ngôn ngữ C/C++

Cấu trúc một hàm bất kỳ được bố trí cũng giống như hàm main() trong các phần trước

Cụ thể:

• Hàm có trả về giá trị

<kiểu hàm> <tên hàm>(danh sách tham đối hình thức)

{

khai báo cục bộ của hàm ; // chỉ dùng riêng cho hàm này

nội dung của hàm;

.return (biểu thức trả về); // có thể nằm đâu đó trong dãy lệnh

}

− Danh sách tham đối hình thức còn được gọi ngắn gọn là danh sách đối gồm dãy cácđối cách nhau bởi dấu phẩy, đối có thể là một biến thường, biến tham chiếu hoặc biến contrỏ, hai loại biến sau ta sẽ trình bày trong các phần tới Mỗi đối được khai báo giống như khaibáo biến, tức là cặp gồm <kiểu đối> <tên đối> Với hàm có trả lại giá trị cần có câu

lệnh return kèm theo sau là một biểu thức Kiểu của giá trị biểu thức này chính là kiểu của

hàm đã được khai báo ở phần tên hàm Câu lệnh return có thể ằm ở vị trí bất kỳ trong phầncâu lệnh, tuỳ thuộc mục đích của hàm Khi gặp câu lệnh return chương trình tức khắc thoátkhỏi hàm và trả lại giá trị của biểu thức sau return như giá trị của hàm

Ví dụ 2 : Ví dụ sau định nghĩa hàm tính luỹ thừa n (với n nguyên) của một số thực bất

kỳ Hàm này có hai đầu vào (đối thực x và số mũ nguyên n) và đầu ra (giá trị trả lại) kiểuthực với độ chính xác gấp đôi là xn

double luythua(float x, int n)

{

int i ; // biến chỉ số

double kq = 1 ; // để lưu kết quả

for (i=1; i<=n; i++) kq *= x ;

4

Trang 5

if(b= =0) cout<<”Phuong trinh vo so nghiem”;

else cout<<”Phuong trinh vo nghiem”;

}

Hàm main() thông thường có hoặc không có giá trị trả về cho hệ điều hành khi chươngtrình hạy xong, vì vậy ta thường khai báo kiểu hàm là int main() hoặc void main() và câulệnh cuối cùng trong hàm thường là return 1 hoặc return Trường hợp bỏ qua từ khoá voidnhưng trong thân hàm không có câu lệnh return (giống phần lớn ví dụ trong giáo trình này)chương trình sẽ ngầm hiểu hàm main() trả lại một giá trị nguyên nhưng vì không có nên khidịch chương trình ta sẽ gặp lời cảnh báo "Cần có giá trị trả lại cho hàm" (một lời cảnh báokhông phải là lỗi, chương trình vẫn chạy bình thường) Để tránh bị quấy rầy về những lờicảnh báo "không mời" này chúng ta có thể đặt thêm câu lệnh return 0; (nếu không khai báovoid main()) hoặc khai báo kiểu hàm là void main() và đặt câu lệnh return vào cuối hàm

4Trình bày cách xây dựng kiểu dữ liệu cấu trúc

4.1 Khai báo, khởi tạo

Để tạo ra một kiểu cấu trúc NSD cần phải khai báo tên của kiểu (là một tên gọi do NSD

tự đặt), tên cùng với các thành phần dữ liệu có trong kiểu cấu trúc này Một kiểu cấu trúcđược khai báo theo mẫu sau:

5

Trang 6

struct <tên kiểu>

−Khai báo biến kiểu cấu trúc cũng giống như khai báo các biến kiểu cơ sở dưới dạng:

struct <tên cấu trúc> <danh sách biến> ; // kiểu cũ trong C

<tên cấu trúc> <danh sách biến> ; // trong C++

Các biến được khai báo cũng có thể đi kèm khởi tạo:

<tên cấu trúc> biến = { giá trị khởi tạo } ;

Trang 7

int mau ;

} ;

hoặc:

struct Phanso { int tu, mau ; }

−Kiểu ngày tháng gồm 3 thành phần nguyên chứa ngày, tháng, năm

Một biến holiday cũng được khai báo kèm cùng kiểu này và được khởi tạo bởi bộ số 1

5 2000 Các giá trị khởi tạo này lần lượt gán cho các thành phần theo đúng thứ tự trong khaibáo, tức ng = 1, th = 5 và nam = 2000

−Kiểu Lop dùng chứa thông tin về một lớp học gồm tên lớp và sĩ số sinh viên Các biếnkiểu Lop được khai báo là daihoc và caodang, trong đó daihoc được khởi tạo bởi bộ giá trị{"K41T", 60} với ý nghĩa tên lớp đại học là K41T và sĩ số là 60 sinh viên

Lop daihoc = {"K41T", 60}, caodang ;

−Kiểu Sinhvien gồm có các trường hoten để lưu trữ họ và tên sinh viên, ns lưu trữ ngàysinh, gt lưu trữ giới tính dưới dạng số (qui ước 1: nam, 2: nữ) và cuối cùng trường diem lưutrữ điểm thi của sinh viên Các trường trên đều có kiểu khác nhau

7

Trang 8

kẽ giữa những thành phần được khởi tạo).Ví dụ này còn minh hoạ cho các cấu trúc lồng nhau,

cụ thể trong kiểu cấu trúc Sinhvien có một thành phần cũng kiểu cấu trúc là thành phần ns

5Trình bày và giải thích cách khai báo lớp trong C++

Trong lập trình hướng đối tượng, lớp (class) là một khái niệm rất quan trọng, nó chophép giải quyết các vấn đề phức tạp của việc lập trình Một lớp đơn (được định nghĩa nhưstruct, union, hoặc class) bao gồm các hàm và dữ liệu có liên quan Các hàm này là các hàmthành phần (member functon) hay còn là phương thức (method), thể hiện tác động của lớp cóthể được thực hiện trên dữ liệu của chính lớp đó (data member)

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ì vậy

ta cũng có thể quan niệm lớp chính là tập hợp các đối tượng cùng kiểu

2.1 Khai báo lớp

Để khai báo một lớp, ta sử dụng từ khoá class như sau:

class tên_lớp

8

Trang 9

// 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 (hàm)

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

// Khai báo các phương thức (hàm) riêng

protected:

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

// Khai báo các phương thức (hàm) được bảo vệ

public:

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

// Khai báo các phương thức (hàm) chung

class A

{

9

Trang 10

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.2 Khai báo các thành phần của lớp (thuộc tính và phương thức)

a Các từ khóa private và public, protected

Khi khai báo các thành phần dữ liệu và phương thức có thể dùng các từ khoá private,

protected và public để quy định phạm vi sử dụng của các thành phần này

- Từ khóa private: qui định các thành phần (được khai báo với từ khóa này) chỉ được

sử dụng bên trong lớp (trong thân các phương thức của lớp) hoặc các hàm bạn Các hàm bênngoài lớp (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 trưng này thể hiện tính che giấu thông tin trong nội bộ của lớp, để đến được các thông tinnày cần phải thông qua chính các thành phần hàm của lớp đó Do vậy thông tin có tính toànvẹn cao và việc xử lý thông tin (dữ liệu) này mang tính thống nhất hơn và hầu như dữ liệutrong các lớp đều được khai báo với từ khóa này

- Từ khóa public: các thành phần được khai báo với từ khóa public được phép sửdụng ở cả bên trong và bên ngoài lớp, điều này cho phép trong chương trình có thể sử dụngcác hàm này để truy nhập đến dữ liệu của lớp Hiển nhiên nếu các thành phần dữ liệu đã khaibáo là privte thì các thành phần hàm phải có ít nhất một vài hàm được khai báo dạng public

để chương trình có thể truy cập được, nếu không toàn bộ lớp sẽ bị đóng kín và điều nàykhông giúp gì cho chương trình Do vậy cách khai báo lớp tương đối phổ biến là các thànhphần dữ liệu được ở dạng private và thành phần hàm dưới dạng public 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

- Từ khóa protected : các thành phần được khai báo với từ khóa protected được sử dụng

từ bên trong lớp, các hàm bạn, các lớp thùa kế

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

Được khai báo như khai báo các thành phần trong kiểu cấu trúc hay hợp Bình thườngcác thành phần này được khai báo là private để bảo đảm tính giấu kín, bảo vệ an toàn dữ liệucủa lớp không cho phép các hàm bên ngoài xâm nhập vào các dữ liệu này

c Các phương thức (hàm thành viên)

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áctrong chương trình

10

Trang 11

Các phương thức có thể được khai báo và định nghĩa bên trong lớp hoặc chỉ khai báobên trong còn định nghĩa cụ thể của phương thức có thể được viết bên ngoài Thông thường,các phương thức ngắn được viết (định nghĩa) bên trong lớp, còn các phương thức dài thì viếtbên ngoài lớp.

Một phương thức bất kỳ của một lớp, có thể sử dụng bất kỳ thành phần (thuộc tính vàphương thức) nào của lớp đó và bất kỳ hàm nào khác trong chương trình (vì phạm vi sử dụngcủa hàm là toàn chương trình)

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

Trang 12

Qua ví dụ trên có thể rút ra một số chú ý 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éptruy 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ếtnhư 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

12

Trang 13

6Trình bày về hàm tạo, hàm hủy trong lớp

4.1 Hàm tạo (hàm thiết lập)

Hàm tạo cũng là một phương thức của lớp (nhưng là hàm đặc biệt) dùng để tạo dựngmột đối tượng mới Chương trình dịch sẽ cấp phát bộ nhớ cho đối tượng sau đó sẽ gọi đếnhàm tạo Hàm tạo sẽ khởi gán giá trị cho các thuộc tính của đối tượng và có thể thực hiện một

số công việc khác nhằm chuẩn bị cho đối tượng mới

a) Đặc điểm của hàm tạo

 Tên của hàm tạo: Tên của hàm tạo bắt buộc phải trùng với tên của lớp

 Không khai báo kiểu cho hàm tạo

 Hàm tạo không có kết quả trả về

 Hàm tạo có thể được xây dựng bên trong hoặc bên ngoài định nghĩa lớp

 Hàm tạo có thể có đối hoặc không có đối

 Trong một lớp có thể có nhiều hàm tạo (cùng tên nhưng khác bộ đối)

 Khi một đối tượng được khai báo, chương trình dịch tự động gọi hàm tạo thực hiện

Ví dụ sau định nghĩa lớp DIEM_DH (Điểm đồ họa) có 3 thuộc tính:

13

Trang 14

int x; // hoành độ (cột) của điểm

int y; // tung độ (hàng) của điểm

int m; // mầu của điểm

và đưa vào 2 hàm tạo để khởi gán cho các thuộc tính của lớp:

DIEM_DH() ; // Hàm tạo không đối: Dùng các giá trị cố định để khởi gán cho x, y, m

DIEM_DH(int x1, int y1, int m1 = 15) ; // Hàm tạo có đối: Dùng các đối x1, y1, m1 để

// Hàm tạo này xây dựng bên ngoài định nghĩa lớp

DIEM_DH(int x1, int y1, int m1 = 15) ;

// Các phương thức khác

Trang 15

} ;

// Xây dựng hàm tạo bên ngoài định nghĩa lớp

DIEM_DH:: DIEM_DH(int x1, int y1, int m1) ;

{

x = x1; y = y1; m = m1;

}

b Dùng hàm tạo trong khai báo

+ Khi đã xây dựng các hàm tạo, ta có thể dùng chúng trong khai báo để tạo ra một đốitượng đồng thời khởi gán cho các thuộc tính của đối tượng được tạo Dựa vào các tham sốtrong khai báo mà trình biên dịch sẽ biết cần gọi đến hàm tạo nào

+ Khi khai báo một biến đối tượng có thể sử dụng các tham số để khởi gán cho cácthuộc tính của biến đối tượng

+ Khi khai báo mảng đối tượng không cho phép dùng các tham số để khởi gán

+ Câu lệnh khai báo một biến đối tượng sẽ gọi tới hàm tạo 1 lần

+ Câu lệnh khai báo một mảng n đối tượng sẽ gọi tới hàm tạo n lần

Ví dụ:

DIEM_DH d; // Gọi tới hàm tạo không đối

// Kết quả d.x = 0, d.y = 0, d.m = 1

DIEM_DH u(300, 100, 5); // Gọi tới hàm tạo có đối

// Kết quả u.x = 300, u.y = 100, d.m = 5

DIEM_DH v(400, 200); // Gọi tới hàm tạo có đối

// Kết quả v.x = 400, v.y = 200, d.m = 15

DIEM_DH p[20] ; // Gọi tới hàm tạo không đối 20 lần

Chú ý: Với các hàm có đối kiểu lớp, thì đối chỉ xem là các tham số hình thức,

vì vậy khai báo đối (trong dòng đầu của hàm) sẽ không tạo ra đối tượng mới và do đó

Trang 16

không gọi tới các hàm tạo.

5 HÀM HỦY (DESTRUCTOR)

Hàm hủy là một hàm thành viên của lớp (phương thức) có chức năng ngược với hàmtạo Hàm hủy được gọi trước khi giải phóng (xoá bỏ) một đối tượng để thực hiện một số côngviệc có tính ''dọn dẹp'' trước khi đối tượng được hủy bỏ, ví dụ như giải phóng một vùng nhớ

mà đối tượng đang quản lý, xoá đối tượng khỏi màn hình nếu như nó đang hiển thị,

Việc hủy bỏ một đối tượng thường xẩy ra trong 2 trường hợp sau:

+ Trong các toán tử và các hàm giải phóng bộ nhớ, như delete, free,

+ Giải phóng các biến, mảng cục bộ khi thoát khỏi hàm, phương thức

5.1 Hàm hủy mặc định

Nếu trong lớp không định nghĩa hàm hủy, thì một hàm hủy mặc định không làm gì cảđược phát sinh Đối với nhiều lớp thì hàm hủy mặc định là đủ, và không cần đưa vào một hàmhủy mới

5.2 Quy tắc viết hàm hủy

Mỗi lớp chỉ có một hàm hủy viết theo các quy tắc sau:

+ Kiểu của hàm: Hàm hủy cũng giống như hàm tạo là hàm không có kiểu, không cógiá trị trả về

+ Tên hàm: Tên của hàm hủy gồm một dấu ngã (đứng trước) và tên lớp:

~Tên_lớp

+ Đối: Hàm hủy không có đối

Ví dụ có thể xây dựng hàm hủy cho lớp DT (đa thức) như sau:

class DT

{

private:

int n; // Bac da thua

double *a; // Tro toi vung nho chua cac he so da thuc a0, a1 ,

public:

Trang 17

5.3 Vai trò của hàm hủy trong lớp DT

Trong phần trước định nghĩa lớp DT (đa thức) khá đầy đủ gồm:

Chúng ta hãy phân tích các khiếm khuyết của chương trình này:

+ Khi chương trình gọi tới một phương thức toán tử để thực hiện các phép tính cộng,trừ, nhân đa thức, thì một đối tượng trung gian được tạo ra Một vùng nhớ được cấp phát vàgiao cho nó (đối tượng trung gian) quản lý

+ Khi thực hiện xong phép tính sẽ ra khỏi phương thức Đối tượng trung gian bị xoá,tuy nhiên chỉ vùng nhớ của các thuộc tính của đối tượng này được giải phóng Còn vùng nhớ(chứa các hệ số của đa thức) mà đối tượng trung gian đang quản lý thì không hề bị giảiphóng Như vậy số vùng nhớ bị chiếm dụng vô ích sẽ tăng lên

7Ý nghĩa các nhãn private, protected, public trong lớp

a Các từ khóa private và public, protected

Khi khai báo các thành phần dữ liệu và phương thức có thể dùng các từ khoá private,

protected và public để quy định phạm vi sử dụng của các thành phần này

Trang 18

- Từ khóa private: qui định các thành phần (được khai báo với từ khóa này) chỉ được

sử dụng bên trong lớp (trong thân các phương thức của lớp) hoặc các hàm bạn Các hàm bênngoài lớp (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 trưng này thể hiện tính che giấu thông tin trong nội bộ của lớp, để đến được các thông tinnày cần phải thông qua chính các thành phần hàm của lớp đó Do vậy thông tin có tính toànvẹn cao và việc xử lý thông tin (dữ liệu) này mang tính thống nhất hơn và hầu như dữ liệutrong các lớp đều được khai báo với từ khóa này

- Từ khóa public: các thành phần được khai báo với từ khóa public được phép sửdụng ở cả bên trong và bên ngoài lớp, điều này cho phép trong chương trình có thể sử dụngcác hàm này để truy nhập đến dữ liệu của lớp Hiển nhiên nếu các thành phần dữ liệu đã khaibáo là privte thì các thành phần hàm phải có ít nhất một vài hàm được khai báo dạng public

để chương trình có thể truy cập được, nếu không toàn bộ lớp sẽ bị đóng kín và điều nàykhông giúp gì cho chương trình Do vậy cách khai báo lớp tương đối phổ biến là các thànhphần dữ liệu được ở dạng private và thành phần hàm dưới dạng public 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

- Từ khóa protected : các thành phần được khai báo với từ khóa protected được sử dụng

từ bên trong lớp, các hàm bạn, các lớp thùa kế

8Cách khai báo đơn thừa kế

2.1 Cách khai báo

Giả sử đã có lớp Person có các thành phần: họ tên, địa chỉ, năm sinh, … Khi xây dựng lớpStudent có các thành phần: họ tên, địa chỉ, năm sinh, mã sinh viên, điểm tổng kết, … Nếuxây dựng lớp Student dựa trên lớp Person thì ta đã sử dụng kỹ thuật thừa kế

Để khai báo lớp B thừa kế từ lớp A ta thực hiện như sau:

class A{//nội dung của lớp A};

class B:<KTK>B{//nội dung lớp B};

Trong đó: KTK là một trong các kiểu sau public, private, protected quy định kiểu dẫn xuất, trong thực tế chỉ dùng dẫn xuất public và protected là phổ biến:

Đối với dẫn xuất public, các thành phần, hàm bạn và các đối tượng lớp dẫn xuất không thể truy nhập tới các thành phần gán nhãn private của lớp cơ sở Các thành phần gán nhãn

khác của lớp cơ sở có nhãn không đổi và được truy xuất trong lớp dẫn xuất

Loại dẫn xuất private ít được sử dụng vì nó không cho phép truy nhập các thành phần từ lớp cơ sở, nhãn truy xuất thuộc tính các thành phần trong lớp cơ sở trở thành nhãn private

trong lớp dẫn xuất

Cuối cùng là loại dẫn xuất protected, như đã nói bên trên rằng các thành phần có nhãn protected không truy xuất được bên ngoài lớp nếu không có chỉ dẫn gì thêm Hơn thế nữa, các thành phần gán nhãn public và protected trong lớp cơ sở sẽ có nhãn protected

Trang 19

và được truy xuất trong lớp dẫn xuất, trái lại các thành phần gán nhãn private sẽ không

thay đổi nhãn nên không được truy xuất trong lớp dẫn xuất

2.2 Ví dụ minh họa

Chương trình đơn giản dưới đây cho thấy cách làm việc với đơn thừa kế, lớp cơ sở xử lý dữliệu điểm còn lớp dẫn xuất public bổ sung thêm dữ liệu màu của điểm đó Hai lớp có các hàmkhởi tạo và hàm thiết lập sao chép và có sự truyền thông tin từ lớp dẫn xuất cho lớp cơ sở,đồng thời lớp dẫn xuất có hàm thành phần display() sử dụng được các thành phần của lớp cơ

Trang 24

Ví dụ sau sẽ so sánh phương thức, hàm bạn và hàm thông thường.

Xét lớp SP (số phức), hãy so sánh 3 phương án để thực hiện việc cộng 2 sốphức:

u.a = this → a + u2.a ;

u.b = this → b + u2.b ;

Trang 25

u.a = u1.a + u2.a ;

u.b = u1.b + u2.b ;

Trang 26

u.a = u1.a + u2.a ;

u.b = u1.b + u2.b ;

return u;

}

Phương án này không được chấp nhận, trình biên dịch sẽ báo lỗi trong thân hàm khôngđược quyền truy xuất đến các thuộc tính riêng (private) a, b của các đối tượng u, u1 và u2thuộc lớp SP

class B; // Khai báo trước lớp B

class C; // Khai báo trước lớp C

// Định nghĩa lớp A

class A

Trang 28

Chương trình sau đây minh họa cách dùng hàm bạn (bạn của một lớp và bạn của nhiềulớp) Chương trình đưa vào 2 lớp VT (véc tơ), MT (ma trận) và 3 hàm bạn để thực hiện cácthao tác trên 2 lớp này:

// Hàm bạn với lớp VT dùng để in một véc tơ

friend void in(const VT &x);

// Hàm bạn với lớp MT dùng để in một ma trận

friend void in(const MT &a);

// Hàm bạn với cả 2 lớp MT và VT dùng để nhân ma trận với véc tơ

friend VT tich(const MT &a, const VT &x);

Nội dung chương trình là nhập một ma trận vuông cấp n và một véc tơ cấp n, sau đóthực hiện phép nhân ma trận với véc tơ vừa nhập

Trang 29

friend void in(const VT &x);

friend VT tich(const MT &a, const VT &x) ; };

Trang 31

for (int j = 1; j< = n; ++j)y.x[i] = a.a[i][j]*x.x[j]; }

void in(const MT &a){

for (int i = 1; i< = a.n; ++i){

cout << "\n " ;

for (int j = 1; j< = a.n; ++j)cout << a.a[i][j] << " "; }

}

void main()

{

Ngày đăng: 05/03/2014, 19:27

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w