You are on page 1of 4

Tóm tắt môn lập trình hướng đối tượng với C++

Chương 1: C++ và lập trình hướng đối tượng


C++ là sự mở rộng của C, bổ sung thêm các khả năng: đóng gói, thừa kế,
nạp chồng và đa hình. Nhờ vậy mà C++ hỗ trợ cả hai phương pháp lập trình:
hướng chức năng và hướng đối tượng. Phương pháp hướng chức năng tách
riêng phần dữ liệu và thao tác ra, còn HĐT thì đóng gói chúng lại để tạo
thành cái gọi là lớp. Điều này là hoàn toàn hợp lý bởi lẽ thao tác sinh ra
nhằm xử lý dữ liệu. Việc phân tích, thiết kế theo phương pháp hướng đối
tượng là việc tìm ra các lớp và mối quan hệ giữa chúng.
Để một chương trình viết bằng C là chương trình C++ chỉ cần thay phần
mở rộng là .CPP.
Một số mở rộng đơn giản của C++ như: kiểu dữ liệu (char, struct), khai
báo linh hoạt, lấy địa chỉ của mảng hai chiều, cấp phát và giải phóng bộ nhớ
(new, delete), hằng có kiểu, biến tham chiếu và hàm.
C++ có thể dùng hàm vào ra printf, scanf của C hoặc dùng hàm cout, cin
trong thư viện iostream.h.

Chương 2: Hàm trong C++


- Bên cạnh khả năng truyền dữ liệu cho hàm theo tham trị được kế thừa
từ C, C++ còn cung cấp thêm cách truyền dữ liệu cho hàm theo tham
chiếu bằng cách dùng đối là biến tham chiếu hoặc hằng tham chiếu. Cách
này tiết kiệm bộ nhớ và thời gian chạy máy do không phải tạo ra các bản sao
của tham số. Hàm thao tác trực tiếp trên vùng nhớ của tham số, do đó dễ
dàng thay đổi giá trị các tham số khi cần.
- Trong lời gọi hàm, không nhất thiết số các tham số thực phải bằng số
các tham số hình thức nếu ta xây dựng hàm có đối mặc định, đây cũng là
một khả năng mạnh của C++. Khi xây dựng hàm có đối mặc định ta chú ý:
các đối mặc định luôn là các đối cuối cùng trong danh sách đối tính từ trái
sang phải, lời gọi hàm có đối mặc định cũng vậy.
- Đối với những hàm nhỏ, ta có thể khai báo nó là hàm trực tuyến
(inline) để giảm thời gian chạy máy. Với loại hàm này, bộ dịch không thực
các thao tác cấp phát, truyền dữ liệu và giải phóng bộ nhớ cho các đối, mà
thay mỗi lời gọi hàm bằng đoạn chương trình thực hiện nhiệm vụ của hàm.
Đó cũng là một mở rộng của C++ so với C. Chú ý, từ khoá inline phải đặt
trước tên hàm và trước hàm main().
- Có thể đặt cùng một tên cho một số hàm với điều kiện: đối của hàm
có số lượng khác nhau hoặc kiểu khác nhau. Đó là khả năng nạp chồng
trong C++(overloading). Khi có lời gọi tới hàm trùng tên, bộ dịch sẽ căn cứ
vào số lượng và kiểu của đối để gọi tới hàm tương ứng.
- C++ còn cho phép Nạp chồng toán tử, nhờ vậy mà việc thực hiện các
phép toán trên kiểu dữ liệu không chuẩn(đa thức, véctơ, ma trận…) có thể
được thực hiện như kiểu dữ liệu chuẩn vậy. Việc nạp chồng toán tử rất đơn
giản: chỉ cần thay tên hàm bằng operator và một phép toán mà ta muốn
nạp chồng (chẳng hạn: DaThức operator+(DaThức, DaTthức)). Khi gọi
hàm thì có thể gọi theo cách truyền thống:c=operator+(a,b), hoặc gọi:
c=a+b, trong đó:a, b, c có kiểu DaThức.

Chương 3: Lớp
Lớp là đối tượng trung tâm của lập trình hướng đối tượng, là sự mở rộng
của cấu trúc bằng cách bổ sung vào nó các phương thức.
Định nghĩa lớp:
class{
phạm_vi: //khai báo dữ liệu thành phần
phạm_vi: //khai báo hàm (phương thức) thành phần
};
Trong đó phạm_vi có thể là private, protected, public.
Nếu phạm_vi là private thì thành phần đó chỉ được truy xuất từ các
thành viên khác của lớp hoặc các thành viên bè bạn. Nếu là protected thì
phạm vi truy xuất cũng giống như private thêm vào đó là chúng có thể được
truy xuất bởi các thành viên của lớp dẫn xuất. Nếu phạm_vi là public thì
thành phần đó có thể được truy xuất ở bất kỳ đâu trong chương trình.
Việc định nghĩa hàm (phương thức) thành phần giống như việc xây dựng
hàm đã nói ở chương hai: có thể nạp chồng hàm, có thể tải bội các phép
toán…. Nếu định nghĩa hàm bên trong định nghĩa lớp thì bộ dịch hiểu đó là
các hàm inline. Đối và kiểu của hàm có thể là các kiểu cơ bản hoặc kiểu lớp.
Đặc biệt, đối thức nhất của hàm luôn là con trỏ this.
So với struct trong C++, cả class và struct đều cho phép khai báo cả dữ
liệu và phương thức. Đối với class, phạm_vi mặc định là private còn đối với
struct thì mặc định là public.

Chương 4: Hàm tạo hàm huỷ và các vấn đề liên quan


- Hàm tạo là hàm đặc biệt (trùng tên với lớp, không có kiểu trả về) làm
nhiệm vụ khởi tạo giá trị cho các đối tượng khi chúng được sinh ra. Có thể
nạp chồng hàm tải bội. Nếu không định nghĩa hàm tạo thì máy sẽ tự sinh ra
hàm tạo mặc định, hàm này chỉ làm nhiệm vụ cấp phát bộ nhớ cho đối tượng
nhưng không khởi gán giá trị cho các thuộc tính của đối tượng. Khi xây
dựng hàm tạo, cần xây dựng ít nhất là hàm tạo không đối.
- Đối với lớp mà thuộc tính của nó là đối tượng của lớp khác thì việc xây
dựng hàm tạo của lớp này phải gọi tới hàm tạo của lớp thành phần.
- Hàm huỷ làm chức năng ngược lại so với hàm tạo. Nó làm nhiệm vụ
huỷ bỏ đối tượng khi chúng không còn ý nghĩa sử dụng. Khi không xây
dựng hàm huỷ máy sẽ gọi tới hàm huỷ mặc định. Đối với lớp có các thuộc
tính là con trỏ hoặc tham chiếu thì cần phải xây dựng hàm huỷ, ngược lại ta
dùng hàm huỷ mặc định là đủ.
- Hàm tạo sao chép làm nhiệm vụ tạo ra một đối tượng mới có nội dung
của đối tượng ban đầu. Khi lớp có các thuộc tính là con trỏ hoặc tham chiếu
cần xây dựng hàm tạo sao chép để đối tượng mới sinh ra độc lập với đối
tượng ban đầu. Nếu lớp không có thuộc tính là con trỏ hay tham chiếu thì
hàm tạo sao chép mặc định là đủ.
- Phương thức toán tử gán: cũng thực hiện tương tự như hàm tạo sao
chép, tuy nhiên nó không sinh ra đối tượng mới, mà chỉ gán giá trị của hai
đối tượng đã tồn tại cho nhau. Nếu lớp có các thuộc tính là con trỏ hay tham
chiếu thì cần xây dựng phương thức toán tử gán, ngược lại ta dung hàm tạo
sao chép mặc định là đủ.
Tóm lại: Đối với lớp có các thuộc tính là con trỏ hay tham chiếu thì
ngoài việc xây dựng hàm tạo ta cần xây dựng thêm: hàm huỷ, hàm tạo sao
chép và phương thức toán tử gán.
- Muốn truy xuất đến các thuộc tính (thành phần private) của lớp ta phải
xây dựng phương thức trả về giá trị của thuộc tính đó hoặc xây dựng hàm
bạn. Một hàm có thể là bạn của nhiều lớp. Hàm bạn không phải là phương
thức của lớp. Nếu muốn các phương thức của lớp A có thể truy xuất được
đến các thành phần private của lớp B thì trong định nghĩa lớp B phải chỉ ra
rằng A là lớp bạn của B. Tuy nhiên, mối quan hệ đó là một chiều.
- Việc phân tích bài toán ta thấy, có những dữ liệu (phương thức) chung
cho mọi đối tượng, tồn tại độc lập với đối tượng, khi đó dữ liệu (phương
thức) đó được khai báo là dữ liệu (phương thức) tĩnh.

Chương 5: Kế thừa và dẫn xuất


- Thừa kế là khả năng tạo ra lớp mới (lớp dẫn xuất, lớp con) từ lớp ban
đầu (lớp cơ sở, lớp cha). Đây là một trong các đặc trưng của phương pháp
hướng đối tượng. Tính năng này giúp các chương trình dễ sửa đổi, bổ sung,
nâng cấp.
- Thuộc tính của lớp dẫn xuất bao gồm các thuộc tính của chính lớp đó
và các thuộc tính được thừa kế từ lớp cơ sở.
- Các phương thức của lớp dẫn xuất gồm các phương thức của chính lớp
đó và các phương thức của lớp cơ sở (trừ phương thức tạo, huỷ và phương
thức toán tử gán).
- Khi xây dựng hàm tạo của lớp dẫn xuất cần sử dụng hàm tạo của lớp cơ
sở. Hàm huỷ của lớp dẫn xuất chỉ thực hiện việc huỷ bỏ các thành phần con
trỏ của chính lớp dẫn xuất. Nếu lớp dẫn xuất có các thuộc tính (kể cả thuộc
tính thừa kế) là con trỏ, thì phải xây dựng phương thức toán tử gán.

phạm vi truy xuất public protected private


Các thành viên trong cùng lớp Có Có Có
Các thành viên của lớp dẫn xuất Có Có không
Không là thành viên Có Không không

Nếu một lớp cơ sở A xuất hiện nhiều hơn một lần trong các lớp cơ sở
trung gian của một lớp dẫn xuất, thì ta khai báo lớp A là lớp cơ sở ảo
(virtual) cho các lớp cơ sở trung gian.

Chương 6: Tương ứng bội và phương thức ảo


Các lớp trừu tượng và phương thức ảo cung cấp cho C++ tính năng đa
hình, khiến cho việc lập trình hướng đối tượng trở thành một công cụ hữu
dụng.
Ở các lớp dẫn xuất, nếu muốn định nghĩa lại một phương thức của lớp cơ
sở, thì ta thêm từ khoá virtual vào đầu dòng tiêu đề của phương thức đó
trong định nghĩa lớp cơ sở, hoặc trong tất cả các định nghĩa lớp để nó trở
thành phương thức ảo. Khi đó, con trỏ đang trỏ tới đối tượng của lớp nào
thì phương thức của lớp đó sẽ được gọi. Điều đó được thực hiện bằng liên
kết động. Với phương thức tĩnh, bao giờ cũng xác định rõ phương thức của
đối tượng thuộc lớp nào. Với phương thức ảo thì không cần.
Trong tiến trình phân tích đi từ cái chung đến cái riêng, từ trừu tượng
đến cụ thể ta thấy, có những lớp mà chỉ dùng làm cơ sở cho các lớp khác, nó
không có đối tượng nào thì được gọi là lớp trừu tượng. Tuy nhiên, con trỏ
hay biến tham chiếu đến các đối tượng của lớp trừu tượng thì vẫn hợp lệ. C+
+ coi lớp trừu tượng là lớp chứa phương thức ảo thuần tuý (nội dung
không có gì).

Chương 7: Template
Xây dựng hàm mẫu, lớp mẫu không phụ thuộc vào kiểu dữ liệu

You might also like