You are on page 1of 16

Đại Học Sư Phạm Tp.

Hồ Chí Minh

LẬP TRÌNH HƯỚNG


ĐỐI TƯỢNG C++

Chương 1. Sự khác biệt giữa C++ và C


Giảng viên: ThS. Nguyễn Đỗ Thái Nguyên
E-mail: nguyenndt@hcmup.edu.vn
Groups: https://www.facebook.com/groups/OOP.HCMUP/
Nội dung chính
• Lịch sử về NNLT C++
• Một số khác biệt giữa C++ và C
• Ôn tập ngôn ngữ lập trình C

2
Lịch sử về NNLT C++
• Năm 1978 ngôn ngữ lập trình C ra đời.
• Năm 1983 NN C++ chính thức được
giới thiệu.
• Thực chất, C++ giống như C và được
bổ sung thêm một số mở rộng quan
trọng, trong đó, quan trọng nhất là ý
tưởng về lập trình hướng đối tượng.
• C++ không phải là NNLT hướng đối
tượng đầu tiên, tuy nhiên C++ là NNLT
hướng đối tượng hoàn thiện đầu tiên

3
Một số khác biệt giữa C++ và C

MỘT SỐ TỪ KHÓA MỚI


asm, class, delete, friend, inline, new,
operator, private, protected, public,
this, virtual

4
Một số khác biệt giữa C++ và C
• Cách ghi chú thích
– Có thể dùng thêm cách chú thích bằng
cách dùng: //
• Cách chuyển đổi kiểu dữ liệu (ép kiểu)
Ví dụ:
y = 1;
float x = 1.7;
int y = (int) x;
z = 65;
char ch = ‘A’;
int z = (int) ch;

5
Một số khác biệt giữa C++ và C
• Vị trí khai báo biến
– Trong C++ ta có thể khai báo biến tại bất
cứ vị trí nào
• Khai báo struct và union
C: C++:
struct Phanso struct Phanso
{ {
int tu, mau; int tu, mau;
}; };
… …
struct Phanso p; Phanso p;
6
Một số khác biệt giữa C++ và C
• Toán tử new (cấp phát) và delete (hủy bộ
nhớ) Khai báo và cấp
phát một con trỏ
a kiểu thực
C: C++:
float *a; float *a;
a = (float *) malloc (sizeof(float)); a = new float;
*a = 3.14; *a = 3.14;
… Khai báo
và …
cấp
free a; delete a;
phát một mảng a
gồm 100 số thực
C: C++:
float *a; float *a;
a = (float *) malloc (100*sizeof(float)); a = new float[100];
… …
free a; delete[] a;

7
Một số khác biệt giữa C++ và C
• Truyền tham số cho hàm
Viết hàm cộng
hai phân số a và
b, kết quả được
C: lưu vào phân số C++:
void Cong(Phanso *a, Phanso b) a void Cong(Phanso &a, Phanso b)
{ {
…. ….
} }
… …
Phanso a,b; Phanso a,b;
a.tu = 1; a.mau = 5; a.tu = 1; a.mau = 5;
b.tu = 2; b.mau = 3; b.tu = 2; b.mau = 3;
Cong(&a, b); Cong(a, b);

Gọi hàm một cách


tự nhiên hơn
8
Một số khác biệt giữa C++ và C
• Hàm inline: dùng cho các hàm chỉ được
gọi một lần trong chương trình
• Hàm inline giúp tiết kiệm bộ nhớ và
tăng tốc khi biên dịch
Ví dụ:
inline int Cong(int a, int b)
{
return a+b;
}

int a = 5, b = 2;
int c = Cong(a,b);

9
Trước hết chúng ta hãy ôn tập lại các kỹ
thuật lập trình với ngôn ngữ C

10
Khái niệm con trỏ
• Khi nói đến một biến, ta thường quan
tâm đến:
– Tên biến
– Giá trị của biến
– Địa chỉ của biến trong bộ nhớ
Tên biến
Giá trị của biến
x
5
0FF2

Địa chỉ của ô nhớ chứa biến

11
Khái niệm con trỏ (tt)
• Con trỏ được dùng để lưu địa chỉ của
biến hay ô nhớ
• Con trỏ kiểu gì sẽ lưu địa chỉ của biến
kiểu ấy.
Ví dụ:
int x = 5;
int *px = &x; // px mang địa chỉ của biến x
*px = 6; // x lập tức bị mang giá trị 6
px = 9; // px sẽ chỉ vào ô nhớ có địa chỉ là 9

12
Khái niệm con trỏ (tt)
• Trong C, mảng cũng được đồng nhất với
con trỏ
Ví dụ:
int a[4] = {1,2,3,4};
/* a cũng có thể được xem là con trỏ mang địa chỉ
của ô nhớ đầu tiên trong mảng (đ/c của a[0]) */
int x = *a; // x = 1;
x = *(a+1); // x mang giá trị của ô nhớ kế tiếp x = 2
*(a+2)=7; // gán a[2] là 7

13
Chuỗi và các hàm liên quan
• Trong C không có khái niệm chuỗi
thuần túy như trong Pascal (string)
• Chuỗi được hiểu là một mảng các ký tự
(cũng có thể được coi là một con trỏ
kiểu ký tự)
• Bài tập: Hãy nhập vào từ có 2 tiếng, sau
đó tìm cách đảo ngược 2 tiếng này.
– VD: Nhập vào: Dai hoc -> xuất: hoc Dai

14
Câu hỏi và thảo luận

15
Chân thành cảm ơn !

16
16

You might also like