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

Giáo án - Bài giảng: TÀI LIỆU LẬP TRÌNH OOP TRONG C++

44 1,7K 1
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Giới thiệu môn học Lập trình hướng đối tượng trong C++
Tác giả Lê Đăng Hưng, Tạ Tuấn Anh
Chuyên ngành Lập trình hướng đối tượng
Thể loại Giáo trình - Bài giảng
Định dạng
Số trang 44
Dung lượng 1,39 MB

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

Nội dung

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚCLập trình cấu trúc: Chương trình = Cấu trúc dữ liệu + giải thuật Lập trình hướng đối tượng Object oriented programming Đặt trọng tâm vào đố

Trang 1

- Thi cuối kỳ lý thuyết: Trắc nghiệm (100%)

- thực hành: làm bài tập lớn + báo cáo+ điểm danh (100%)

- Tài liệu tham khảo:

1 Lập trình hướng đối tượng với C++, Lê Đăng Hưng, Tạ Tuấn Anh…

2 C how to program, Deitel, International edition, Prentice Hall, 2004

Trang 3

1 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚC

Lập trình cấu trúc:

Chương trình = Cấu trúc dữ liệu + giải thuật

Lập trình hướng đối tượng (Object oriented programming)

Đặt trọng tâm vào đối tượng

Trang 4

Các đặc điểm của lập trình hướng đối tượng:

- Tập trung vào dữ liệu thay cho các hàm

- Chương trình được chia thành các đối tượng

- Cấu trúc dữ liệu được thiết kế sao cho đặc tả được đối tượng

- Các hàm thao tác trên các vùng dữ liệu của đối tượng được gắn với cấu dữ liệu đó

- Dữ liệu được đóng gói lại, được che giấu và không cho phép các hàm ngoại lại truy nhập tự do

- Các đối tượng tác động và trao đổi thông tin với nhau qua các hàm

- Có thể dể dàng bổ sung dữ liệu và các hàm mới vào đối tượng nào đó khi cần thiết

- Chương trình được thiết kế theo cách tiếp cận từ dưới lên

Trang 5

1.LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚC

Đối tượng (object)

-Đối tượng là sự kết hợp giữa dữ liệu và phương thức - method (thủ tục, hàm) thao tác trên dữ liệu đó

Đối tượng = dữ liệu + phương thức

Lớp (class)

-Lớp là một tập các đối tượng có cấu trúc dữ liệu và các phương thức giống nhau Một đối tượng là một

thể hiện cụ thể (instance) của một lớp.

-Trong lập trình ta có thể coi lớp như một kiểu dữ liệu, các đối tượng là biến có kiểu của lớp

Đóng gói

-Đóng gói về chức năng: sử dụng các hàm hay thủ tục mà không cần biết đến nội dung bên trong nó,

người dùng chỉ cần biết chức năng và các tham số cần truyền vào để gọi hàm

-Đóng gói dữ liệu: với mỗi đối tượng người dùng không thể truy cập trực tiếp vào các thành phần dữ

liệu của nó mà phải thông qua các phương thức

Trang 6

Thừa kế (inheritance)

Kế thừa trong lập trình hướng đối tượng cho phép định nghĩa một lớp mới trên cơ sở lớp đã tồn tại và

bổ sung thêm các phương thức hay thành phần dữ liệu mới

Đa hình (polymorphime)

Các đối tượng khác nhau ứng xử với cùng một hành vi là khác nhau

Ví dụ:

- việc đi của xe đạp và xe hơi

- Tính diện tích của tam giác và đa giác

Trang 7

1.LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG VÀ LẬP TRÌNH CẤU TRÚC

Các ưu điểm của LTHĐT

-Tính thừa kế

-Xây dựng phần mềm theo quy trình không còn dựa chủ yếu vào kinh nghiệm -> rút ngắn thời gian, tăng

năng suất

-Tính đóng gói tăng tính an toàn

-Ánh xạ các đối tượng từ thế giới thực vào chương trình

-Cách tiếp cận theo HĐT dể dàng cài đặt

-Dể mở rộng và nâng cấp

-Thuận tiện mô tả giao tiếp giữa hệ thống với thế giới bên ngoài

-Quản lý được độ phức tạp của chương trình

Trang 8

Các ưu điểm của LTHĐT

-Tính thừa kế

-Xây dựng phần mềm theo quy trình không còn dựa chủ yếu vào kinh nghiệm -> rút ngắn thời gian, tăng

năng suất

-Tính đóng gói tăng tính an toàn

-Ánh xạ các đối tượng từ thế giới thực vào chương trình

-Cách tiếp cận theo HĐT dể dàng cài đặt

-Dể mở rộng và nâng cấp

-Thuận tiện mô tả giao tiếp giữa hệ thống với thế giới bên ngoài

-Quản lý được độ phức tạp của chương trình

Trang 9

1 CÁC ĐIỂM KHÔNG TƯƠNG THÍCH GIỮA C++ VÀ ANSI C 1.2 Khai báo hàm nguyên mẫu

- Tronc C chỉ cần khai báo tên hàm và giá trị trả về, không cần danh sách kiểu của các tham số

- C++ khai báo hàm nguyên mẫu

Với C++ một lời gọi hàm chỉ được chấp nhận khi trình biên dịch biết được kiểu của các tham số, kiểu của giá trị trả về

Trang 10

Chuyển kiểu tự động theo nguyên tắc sau:

char -> int ->longint -> float ->double

x1=ham(n,x); /* không có chuyển đổi kiểu*/

x2=ham(c,x); /* có chuyển đổi kiểu từ char->int*/

x3=ham(x,n); /* có chuyển đổi kiểu từ double ->int và từ int thành double */

Trang 11

1 CÁC ĐIỂM KHÔNG TƯƠNG THÍCH GIỮA C++ VÀ ANSI C

1.3 Sự tương thích giữa con trỏ void và các con trỏ khác

Trong ANSI C, kiểu void tương thích với các kiểu con trỏ khác cả hai chiều

Trang 12

Trong tệp tiêu đề isotream.h người ta định nghĩa hai đối tượng cout và cin tương ứng với hai thiết bị chuẩn ra vào được sử dụng cùng với << và >> Thường thì ta hiểu cout là màn hình còn cin là bàn phím

2.1 Ghi dữ liệu ra thiết bị chuẩn cout

Trang 13

2 CÁC KHẢ NĂNG RA VÀO MỚI CỦA C++

2.1 Ghi dữ liệu ra thiết bị chuẩn cout

Sử dụng cout và << đưa ra các giá trị khác nhau

int n=25;

cout << “value :“<<n ; }

Trang 14

2.1 Các khả năng viết ra trên cout

Có thể sử dụng toán tử << cùng với cout để đưa ra màn hình giá trị của một biểu thức có các kiểu sau :

 Kiểu cơ sở (char, int, float, double)

 Xâu ký tự (char *)

 Con trỏ (trừ con trỏ char *)

Trong trường hợp muốn đưa ra địa chỉ của xâu ký tự phải thực hiện việc chuyển đổi kiểu tường minh (char*)->(void*)

Trang 15

2 CÁC KHẢ NĂNG RA VÀO MỚI CỦA C++

2.1 Các khả năng viết ra trên cout

<<(void*)st<<”\n”;

}

Trang 16

2.2 Đọc dữ liệu từ thiết bị chuẩn cin

Trang 17

2 CÁC KHẢ NĂNG RA VÀO MỚI CỦA C++

2.2 Đọc dữ liệu từ thiết bị chuẩn cin

Giống với hàm scanf(), cin tuân theo một số qui ước dùng trong việc phân tích các

ký tự

 Các giá trị số được phân cách bởi : SPACE, TAB, CR, LF Khi gặp một ký tự không hợp lệ như dấu “.” đối với số nguyên, chữ cái đối với số, sẽ kết thúc việc đọc cin, ký tự không hợp lệ này sẽ được xem xét trong lần đọc sau

 Đối với gía trị xâu ký tự, dấu phân cách cũng là SPACE, TAB, CR còn đối với gía trị ký tự, dấu phân cách là dấu CR Trong hai trường hợp này không

có khái niệm “ký tự không hợp lệ” Mã sinh ra do nhấn phím Enter của lần nhập trước vẫn được xét trong lần nhập chuỗi hay ký tự tiếp theo và do đó

sẽ có nguy cơ không nhập được đúng giá trị mong muốn khi đưa ra lệnh nhập xâu lý tự hoặc ký tự ngay sau các lệnh nhập cá giá trị khác Giải pháp khắc phục ta dùng một trong hai lệnh sau

fflush(stdin) ; // khai báo trong stdio.h

cin.clear(); // hàm thành phần của lớp cin

Trang 18

2.2 Đọc dữ liệu từ thiết bị chuẩn cin

Trang 19

3 NHỮNG TIỆN ÍCH CHO NGƯỜI LẬP TRÌNH

3.1 Ghi chú thích cuối dòng

C++ dùng // để chỉ ra một dòng là chú thích

Ví dụ

cout << ” Xin chao \n“ ; // xin chao

3.2 Khai báo mọi nơi

}

Trang 20

int a=10; // a cục bộ ::a=10 ; // a toàn cục cout<<a; // a cục bộ cout<<::a; // a toàn cục}

Trang 21

4 HÀM INLINE

Trong C++ ta có thể định nghĩa các hàm được thay thế trực tiếp thành mã lệnh máy tại chổ gọi (inline) mỗi lần được tham chiếu Ưu điểm của hàm inline là chúng không đòi hỏi các thủ tục bổ sung khi gọi hàm và trả về giá trị Do vậy, hàm inline được thực hiện nhanh hơn so với các hàm thông thường

Trang 22

int i;

long s=0;

for (i=0;i<3;i++) s+=a[i];

return s;

}

Trang 23

5 THAM CHIẾU

Ngôn ngữ C++ giới thiệu một khái niệm mới là tham chiếu ”reference” Một tham chiếu có thể là một biến, tham số hình thức của hàm hay dùng làm giá trị trả về của một hàm

5.1 Tham chiếu tới một biến

Trang 24

5.1 Tham chiếu tới một biến

Tham chiếu và con trỏ giống nhau vì cùng chỉ đến các đối tượng có địa chỉ, cùng được cập phát địa chỉ khi khai báo Nhưng cách sử dụng thì khác nhau Khi nói tới tham chiếu ta phải gán nó với một biến nào đó đã khai báo, trong khi con trỏ thì không nhất thiết phải khởi tạo giá trị cho nó Con trỏ có thể tham chiếu tới nhiều biến khác nhau con biến tham chiếu chỉ có thể tham chiếu tới một biến duy nhất lúc khởi tạo nó

q=4 ; // gán cho n giá trị là 4

q=m ; // gán m cho biến n

Trang 25

int x=3,&y; // sẽ báo lỗi vì y chưa

được khởi tạo

}

Ví dụ :int &p=3; // không hợp lệconst int &p=3; // hợp lệ

Trang 26

5.2 Truyền tham số cho hàm bằng tham chiếu

Ví dụ :

#include<conio.h>

#include<iostream.h>

/* hàm được gọi theo truyền tham trị*/

void swap1(int x, int y) {

void swap3(int &x,int &y) {int temp=x;

x=y;

y=temp;

}

Trang 27

}

Trang 28

5.3 Giá trị trả về của hàm là tham chiếu

Trang 29

cout<<”nhap gia tri cho mang a: \n”;

for (int i=0;i<5;i++) {

cout <<”a[“<<i<<”]=”;

cin>>fr(a,i);

}cout<<”Mang a sau khi nhap \n”;for (i=0;i<5;i++)

cout<<a[i]<<” ”;

cout <<”\n”;

getch();

}Int &fr(int *d,int i){

return d[i];

}

Trang 30

C++ cho cho phép sử dụng một tên cho nhiều hàm khách nhau ta gọi đó là sự chồng hàm.

#include <iostream.h>

//Ham nguyen mau

int min(int, int); //Ham 1

double min(double, double);//Ham 2

char min(char, char);//Ham 3

int min(int, int, int);//Ham 4

int min(int, int *);//Ham 5

Trang 31

6 ĐỊNH NGHĨA CHỒNG HÀM

Trường hợp có nhiều hàm trùng tên trong chương trình, việc xác định hàm nào được gọi tuân theo nguyên tắc sau:

a Tương ứng thật sự

b Tương ứng dữ liệu số nhưng có sự chuyển đổi kiểu tự động

char và short >int; float >int

c Các chuyển đổi kiểu được C và C++ chấp nhận

d Chuyển đổi kiểu do người dùng định nghĩa

Trang 32

#include <iostream.h>

void main() {

int n=10,p=20;

void fct(int, int = 12) ;//khai bao co 1 gia

tri ngam dinh

Trang 33

7 THAM SỐ NGẦM ĐỊNH TRONG LỜI GỌI HÀM

- Các tham số có giá trị ngầm định phải được đặt ở cuối trong danh sách các tham số của hàm

- Các giá trị ngầm định của tham số được khai báo, không phải trong phần định nghĩa hàm

void fct(int =0,int =12);

cout<<"Goi fct trong main\n";

Trang 34

- Nếu muốn khai báo giá trị ngầm định cho một biến con trỏ thì phải viết dấu * và

Trang 35

7 THAM SỐ NGẦM ĐỊNH TRONG LỜI GỌI HÀM

Trang 37

8 BỔ SUNG THÊM TOÁN TỬ QUẢN LÝ BỘ NHỚ ĐỘNG: new

Trang 38

new type[n]; // n là biểu thức nguyên không âm

Cấp phát vùng nhớ đủ để chứa n thành phần kiểu type và trả lại con trỏ đến đầu vùng nhớ đó nếu cấp phát thành công

Trang 39

8 BỔ SUNG THÊM TOÁN TỬ QUẢN LÝ BỘ NHỚ ĐỘNG: new

và delete

8.1 Toán tử giải phóng vùng nhớ động delete

- Một vùng nhớ được cấp phát bằng new phải được giải phóng bằng delete

delete adr;

delete adc;

Trang 40

//cap phat mang 10 con tro nguyen

mat = new int *[10];

for(i=0; i<10; i++)

//moi con tro nguyen tro den vung

nho 10 so nguyen

mat[i] = new int [10];

//nhap so lieu cho mang

cout<<"Nhap so lieu cho matran 10*10\n";

delete mat;

}

Trang 41

7 BỔ SUNG THÊM TOÁN TỬ QUẢN LÝ BỘ NHỚ ĐỘNG: new và delete

void Nhap(int ** mat) {

cout<<"\n";

} }

Ngày đăng: 16/04/2014, 15:07

TỪ KHÓA LIÊN QUAN

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

w