1. Trang chủ
  2. » Công Nghệ Thông Tin

Chương 1 Lập trình hướng đối tượng

21 194 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 21
Dung lượng 172,5 KB

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

Nội dung

Cấu trúc một chương trình C++  Khai báo thư viện  Định nghĩa các hằng, và các kiểu dữ liệu  Khai báo các hàm và biến toàn cục  Hàm thực thi ban đầu của chương trình main  Cài đặt cá

Trang 1

Chương 1: Các khái niệm cơ bản trong C++

1.1 Cấu trúc một chương trình C++

 Khai báo thư viện

 Định nghĩa các hằng, và các kiểu dữ liệu

 Khai báo các hàm và biến toàn cục

Hàm thực thi ban đầu của chương trình main()

 Cài đặt các hàm đã khai báo ở bên trên

Chúng ta hãy xem xét các vấn đề này trong một chương trình C++ đơn giản dưới đây:

Dòng 1: Khai báo thư viện gồm có:

+) Chỉ thị tiền xử lý #include

+) Tên thư viện <iostream.h> Đối với thư viện chuẩn ta đặt trong dấu <…>, các thư viện

do người dùng định nghĩa ta đặt trong dấu “c:\\MyLib\\Dagiac.h”

Dòng 2: Định nghĩa hàm main() Đây là hàm bắt đầu thực thi của một chương trình C++ Do vậy

bất cứ một chương trình C++ nào cũng phải có hàm main() Hàm main() có hai dạng: có kiểu

hoặc không có kiểu void main()

Dòng 3: Dấu { tương đương với Begin trong ngôn ngữ Pascal Để xác định sự bắt đầu của một

hàm Trong C++ cặp dấu { } để xác định sự bắt đầu và kết thúc của một hàm

Dòng 4: cout << "Hello World"; Đây là dòng lệnh in lên màn hình dòng chữ "Hello World".cout là một dòng (stream) ra chuẩn trong C++ được định nghĩa trong thư viện iostream

Chú ý rằng dòng này kết thúc bằng dấu chấm phẩy ( ; ) Kí tự này được dùng để kết thúc mộtlệnh và bắt buộc phải có sau mỗi lệnh trong chương trình C++ của bạn (một trong những lỗi phổbiến nhất của những lập trình viên C++ là quên mất dấu chấm phẩy)

Dòng 5: Dấu } tương đương với End trong ngôn ngữ Pascal, xác định sự kết thúc của hàm main() 1.2 Các kiểu dữ liệu chuẩn trong C++

1.2.1 Kiểu số nguyên

- Kiểu số nguyên có thể là các kiểu: short , int , long, unsigned int, unsigned short… Nhưng các

kiểu này có kích thước khác nhau

Trang 2

unsigned long 4byte 0 đến 429496729

Mặc định số nguyên là có dấu Tuy nhiên, một số nguyên có thể được định nghĩa là không

có dấu bằng cách sử dụng từ khóa unsigned trong định nghĩa của nó Các kiểu số nguyên không dấu được bắt đầu bằng từ unsigned + kiểu dữ liệu số nguyên Ví dụ như unsigned short,

unsigned int, unsigned long…

Ví dụ 1:

unsigned short age = 20;

unsigned int salary = 65000;

unsigned long price = 4500000;

Số nguyên luôn luôn được mặc định là kiểu int, trừ khi có một hậu tố L hoặc l thì nó

được hiểu là kiểu long Một số nguyên cũng có thể được đặc tả sử dụng hậu tố là U hoặc u ,

Ví dụ: 1984L 1984l 1984U 1984u 1984LU 1984ul

Mặc định trong C++ kiểu số thực là double

Giống như số nguyên, biến ký tự có thể là có dấu hoặc không dấu Mặc định trong hầu hết

các hệ thống thì char nghĩa là có dấu có miền giá trị từ -128 đến 128 Tuy nhiên, trên một số hệ thống thì char lại là không dấu( unsigned char) có miền giá trị từ 0 đến 255.

Kí tự trong C++ được viết nằm trong cặp dấu nháy đơn ví dụ ‘C’ Có một số kí tự đặc biệtkhông in ra được được biểu diễn thông qua các kí hiệu đặc biệt như sau:

Trang 3

‘\\’ Kí tự \

1.2.3.2 Chuỗi

Chuỗi là một dãy liên tiếp các ký tự được kết thúc bằng một ký tự null Biến chuỗi được

định nghĩa kiểu char* (con trỏ ký tự) hoặc char ten[20] - mảng kí tự

Ví dụ 4: “Xin chao cac ban\

Den voi viet nam”

Tương đương với “Xin chao cac ban Den voi viet nam”

Sự khác biệt giữa chuỗi kí tự và kí tự đơn là:

cout<<”\n a=”; cin>>a;

cout<<”\n b=”; cin>>b;

Trang 4

if (a!=0) {

cout<<”Phuong trinh co No X=”<<-b/a;

} else {

if (b==0)

cout<<”Phuong trinh co vo so nghiem”;

else cout<<”Phuong trinh co vo nghiem”;

} cin.get();

cin.get();// Dung chuong trinh }

1.4 Đặt tên trong C++

Ngôn ngữ lập trình sử dụng tên để tham chiếu tới các thực thể khác nhau để tạo ra chươngtrình Ở ví dụ 5 ta thấy các tên a, b đây là tên các biến Ngoài tên biến chúng ta còn có các loạitên khác như: tên hàm, tên kiểu, và tên macro

Sử dụng tên rất tiện lợi cho việc lập trình, nó cho phép lập trình viên tổ chức dữ liệu theocách thức mà con người có thể hiểu được Tên không được đưa vào mã có thể thực thi được tạo

ra bởi trình biên dịch

C++ áp đặt những luật sau để xây dựng các tên hợp lệ (cũng được gọi là các định danh).

Một tên chứa một hay nhiều ký tự, mỗi ký tự có thể là một chữ cái ('A'-'Z' và 'a'-'z'), một kí tự số ('0'-'9'), hoặc một ký tự gạch dưới ('_') Tên không được bắt đầu là một số, không được trùng tênvới kiểu dữ liệu và từ khóa Trong C++ phân biệt chữ hoa và chữ thường, các ký tự viết hoa vàviết thường là khác nhau

Ví dụ 6:

Luong, tuan1, _tuan2 là các tên hợp lệ

12tuan, @tuan, !tuan3 là các tên không đúng

1.5 Biến, khai báo biến.

Biến là một tên tượng trưng cho một vùng nhớ mà dữ liệu có thể được lưu trữ trên đó, cóthể được sử dụng lại và có thể thay đổi được dữ liệu trên vùng nhớ đó Các biến được sử dụng đểlưu các giá trị dữ liệu vì thế mà chúng có thể được dùng trong nhiều tính toán khác nhau trongmột chương trình

Cú pháp khai báo biến trong C++ như sau:

Ở ví dụ 7 ta có biến ngay kiểu số nguyên và kiến dientich kiểu số thực.

Một điểm rất linh hoạt trong C++ là ta có thể khai báo biến ở bất kì vị trí nào trongchương trình trước khi các biến được sử dụng

Trang 5

1.6 Hằng

Hằng là đại lượng không đổi trong chương trình Có hai dạng khai báo hằng

+) Khai báo hằng không kiểu Để định nghĩa một hằng ta thực hiện theo cú pháp sau :

#define ten_hằng giá_trị

Ví dụ 8:

#define MAX 1000

#define TH2 “Thu hai”

#define PI 3.1414141414

+) Khai báo hằng có kiểu

const kieu_dulieu ten_hang

Ví dụ 9:

const int MAX=1000;

const float PI=3.14141415;

1.7 Các toán tử trong C++

1.7.1 Toán tử gán (=)

Toán tử gán dùng để gán một giá trị nào đó cho một biến

Ví dụ 8: a = 5; gán giá trị nguyên 5 cho biến a

+ Vế trái bắt buộc phải là một biến, còn vế phải có thể là bất kì: hằng, biến hay kết quảcủa một biểu thức

+ Toán tử gán luôn được thực hiện từ trái sang phải và không bao giờ đảo ngược

Ví dụ 9: a = b; gán giá trị của biến a bằng giá trị đang chứa trong biến b Chú ý rằngchúng ta chỉ gán giá trị của b cho a và sự thay đổi của b sau đó sẽ không ảnh hưởng đến giá trịcủa a

Ví dụ 10: a = 2 + (b = 5); tương đương với b = 5; a = 2 + b;

Ví dụ 11: a = b = c = 5; gán giá trị 5 cho cả ba biến a, b và c

%: lấy phần dư (trong phép chia)

Thứ tự thực hiện các toán tử này cũng giống như chúng được thực hiện trong toán học.Điều duy nhất có vẻ hơi lạ đối với bạn là phép lấy phần dư, ký hiệu bằng dấu phần trăm (%) Đâychính là phép toán lấy phần dư trong phép chia hai số nguyên với nhau

Ví dụ 12: a = 11 % 3;, biến a sẽ mang giá trị 2 vì 11 = 3*3 +2

1.7.3 Các toán tử gán phức hợp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)

a+=b; ⇔ a=a+b

a-=b; ⇔ a=a-b

a*=b; ⇔ a=a*b

Trang 6

- Trong trường hợp toán tử được sử dụng như là một tiền tố (++a) giá trị được tăngtrước khi biểu thức được tính và giá trị đã tăng được sử dụng trong biểu thức;

có giá trị true hoặc false, tuỳ theo biểu thức kết quả là đúng hay sai

Sau đây là các toán tử quan hệ bạn có thể sử dụng trong C++

==: Bằng

!=: Khác

Trang 7

1.7.6 Các toán tử logic ( !, &&, || ).

- Toán tử !: tương đương với toán tử logic NOT, nó chỉ có một đối số ở phía bên phải vàviệc duy nhất mà nó làm là đổi ngược giá trị của đối số từ true sang false hoặc ngược lại

Ví dụ 15: !(5 == 5) trả về false vì biểu thức bên phải (5 == 5) có giá trị true

!(6 <= 4) trả về true vì (6 <= 4)có giá trị false

- Toán tử logic && và || được sử dụng khi tính toán hai biểu thức để lấy ra một kết quảduy nhất Chúng tương ứng với các toán tử logic AND và OR Kết quả của chúng phụ thuộc vàomối quan hệ của hai đối số:

Ví dụ 16:

( (5 == 5) && (3 > 6) ) trả về false ( true && false )

( (5 == 5) || (3 > 6)) trả về true ( true || false )

1.7.7 Toán tử điều kiện ( ? ).

Toán tử điều kiện tính toán một biểu thức và trả về một giá trị tuỳ thuộc vào biểu thức đó

là đúng hay sai Cấu trúc của nó như sau:

(Biểu thức điều kiện) ? result1 : result2

Nếu biểu thức điều kiện là true thì giá trị trả về sẽ là result1, nếu không giá trị trả về làresult2

Ví dụ 17: 7==5 ? 4 : 3 trả về 3 vì 7 không bằng 5

a>b ? a : b trả về giá trị lớn hơn, a hoặc b

1.7.8 Các toán tử thao tác bit ( &, |, ^, ~, <<, >> ).

Các toán tử thao tác bit thay đổi các bit biểu diễn một biến, có nghĩa là thay đổi biểu diễnnhị phân của chúng

+) &: AND

Ví dụ 18:

int a=4; // viết dưới dạng nhị phân a=100int b=5; // viết dưới dạng nhị phân a=101int c;

Trang 8

1.7.9 Các toán tử chuyển đổi kiểu

Các toán tử chuyển đổi kiểu cho phép bạn chuyển đổi dữ liệu từ kiểu này sang kiểu khác

Có vài cách để làm việc này trong C++, cách cơ bản nhất được thừa kế từ ngôn ngữ C là đặttrước biểu thức cần chuyển đổi tên kiểu dữ liệu được bọc trong cặp ngoặc đơn (),

i = int ( f );

1.7.10 Toán tử sizeof()

Toán tử này có một tham số, đó có thể là một kiểu dữ liệu hay là một biến và trả về kích

cỡ bằng byte của kiểu hay đối tượng đó

a = sizeof (char);

a sẽ mang giá trị 1 vì kiểu char luôn có kích cỡ 1 byte trên mọi hệ thống Giá trị trả về củasizeof là một hằng số vì vậy nó luôn luôn được tính trước khi chương trình thực hiện

1.7.11 Các toán tử khác

Trong C++ còn có một số các toán tử khác, như các toán tử liên quan đến con trỏ như new

, delete hay lập trình hướng đối tượng như toán tử phạm vi :: … Chúng sẽ được nói đến cụ thể

trong các phần tương ứng

1.7.12 Thứ tự ưu tiên của các toán tử

Khi viết các biểu thức phức tạp với nhiều toán hạng các bạn có thể tự hỏi toán hạng nàođược tính trước, toán hạng nào được tính sau Ví dụ như trong biểu thức sau:

a = 5 + 7 % 2

có thể có hai cách hiểu sau:

a = 5 + (7 % 2) với kết quả là 6, hoặc

a = (5 + 7) % 2 với kết quả là 0

Câu trả lời đúng là biểu thức đầu tiên Vì nguyên nhân nói trên, ngôn ngữ C++ đã thiết lậpmột thứ tự ưu tiên giữa các toán tử, không chỉ riêng các toán tử số học mà tất cả các toán tử cóthể xuất hiện trong C++ Thứ tự ưu tiên của chúng được liệt kê trong bảng sau theo thứ tự từ caoxuống thấp

Trang 9

1.8 Nhập và xuất dữ liệu trong C++

Để nhập và xuất dữ liệu trong C++, có thư viện iostream chứa 2 đối tượng :

- Đối tượng cin: bao gồm có toán tử nhập, các phương thức để lo nhập dữ liệu từ bànphím

- Đối tượng cout: bao gồm có toán tử xuất, các phương thức và các cờ định dạng cho việcxuất dữ liệu ra màn hình

Trang 10

- Để đặt độ rộng hiển thị chúng cũng có thể sử dụng hàm setw(int n) trong thư viện

<iomanip.h> như sau :

Kết quả là: ****5678

- Sử dụng hàm setfill(char c) của thư viện <iomanip.h>

c) Định dạng hiển thị số thập phân

- Đặt độ chính xác cho việc số thập phân

Để đặt độ chính xác cho việc hiển thị số thập phân chúng ta có hai cách :

+ Sử dụng phương thức precision(int n) của đối tượng cout như ví dụ sau:

+) Để bật các cờ định dạng ta có hai cách:

Trang 11

- Sử dụng phương thức setf(long f) của đối tượng cout

- Sử dụng hàm setiosflags(long f) trong thư viện <iomanip.h>

+) Để tắt các cờ chúng ta cũng có hai cách:

- Sử dụng phương thức unsetf(long f) của đối tượng cout

- Sử dụng hàm resetiosflags(long f) trong thư viện <iomanip.h>

- ios::dec để hiển thị số nguyên dưới dạng thập phân

- ios::oct để hiển thị số nguyên dưới dạng cơ số 8

- ios::hex để hiển thị số nguyên dưới dạng cơ số 16+) Định dạng số thực

- ios::fixed: mặc định được hiển thị

- ios::showpoint: hiển thị số chữ số phần thập phân được in ra đúng bằng độ chínhxác

- ios::scientific: hiển thị số thực dưới dạng hàm mũMặc định cờ ios::fixed được bật và ios::showpoint tắt

1.8.2 Nhập dữ liệu

cin là một đối tượng kiểu istream trong C++ Đây là dòng nhập chuẩn gắn với bàn phím.

Các thao tác nhập dữ liệu từ bàn phím sẽ gắn liền với các thao tác trên dòng cin

Đối tượng cin bao gồm có:

*) Nguyên tắc nhập lần lượt như sau:

- Bỏ qua các kí tự trắng như tab, dấu cách, enter… đứng trước nếu có

- Đọc lần lượt các kí tự nhập vào tương ứng với kiểu tham số

- Nếu gặp kí tự trắng sẽ kết thúc việc nhập

Ví dụ:

int a;

cin>>a;

Trang 12

Nếu trên bàn phím ta gõ các kí tự như sau: <space><tab>456X7<ENTER> Thì kết quảbiến a sẽ nhận là 456.

Theo nguyên tắc trên thì đối với việc nhập chuỗi kí tự ta không thể thực hiện được vớichuỗi kí tự có chứa kí tự trắng

Theo nguyên tắc của toán tử nhập >> thì nó chỉ thích hợp với việc nhập dữ liệu cho các

biến có kiểu số, còn đối với kí tự và chuỗi kí tự thì cin có các phương thức nhập rất hiệu quả đó

là: cin.get(); cin.getline(), cin.ignore(); Chúng ta sẽ xem xét lần lượt các hàm này

a Hàm cin.get()

Đây là một hàm chồng nên chúng ta có thể sử dụng nó dưới 3 dạng khác nhau:

Dạng 1: int cin.get() để đọc một kí tự từ bàn phím bao gồm cả các kí tự trắng

Ví dụ: char ch;

ch=cin.get();

Nếu ở bàn phím ta gõ ở bàn phím:

+) ABC<ENTER>: thì biến ch sẽ là A

+) <ENTER>: thì biến ch sẽ là <ENTER>

+) <SPACE> : thì biến ch sẽ là <SPACE>

Dạng 2: istream& cin.get(char& ch) dùng để đọc một kí tự bao gồm cả kí tự trắng

và đặt vào biến tham chiếu ch;

Vì hàm cin.get() ở dạng này có kết quả trả về là một đối tượng cin, nên ta có thể sử dụng nhiều hàm get() nối đuôi nhau

Ví dụ 1:

char ch1, ch2 ; cin.get(ch1);

cin.get(ch2);

Ví dụ 2:

char ch1, ch2 ; cin.get(ch1).get(ch2);

Nếu ở bàn phím ta gõ ở bàn phím:

+) ABC<ENTER>: thì biến ch1= ‘A’; ch2=’B’

+) A<ENTER>: thì biến ch1= ‘A’; ch2=<ENTER>

Dạng 3: istream& cin.get(char* str, int n, char gh=’\n’) dùng để nhập chuỗi kí tự

bao gồm cả các kí tự trắng, và đưa chuỗi kí tự đã nhập vào vùng nhớ được trỏ đến bởi

con trỏ str.

Quá trình đọc chuỗi kí tự từ bàn phím sẽ kết thúc khi gặp một trong hai tình huốngsau:

+) Số kí tự nhập vào là n-1 +) Gặp kí tự giới hạn gh

Trang 13

Vì hàm cin.get() ở dạng này có kết quả trả về là một đối tượng cin, nên ta có thể sử dụng nhiều hàm get() nối đuôi nhau

Ví dụ:

char ten[30] ; cin.get(ten, 30) ;

Nếu từ bàn phím ta gõ : LE VAN TUAN<ENTER> thì biến ten = LE VAN TUAN.Nhưng kí tự <ENTER> vẫn nằm trên dòng nhập, nếu ta đọc hai chuỗi kí tự liền nhau,thì chuỗi thứ hai sẽ bị trôi

b Hàm cin.getline() : istream& cin.getline(char* str, int n, char gh=’\n’)

Hàm cin.getline() giống như hàm cin.get() ở dạng 3 nhưng hàm này tối ưu hơn bởi vì nóloại kí tự giới hạn ‘\n’ ra khỏi dòng nhập Như vậy ta có thể dùng hàm cin.getline() đểnhập nhiều chuỗi kí tự cùng một lúc

Ví dụ:

char ten[30] , dc[30];

cin.getline(ten, 30).get getline(dc,30);

c Hàm cin.ignore() : Dùng để đọc một kí tự ra khỏi dòng nhập

d Các điểm chú ý khi nhập cả số và chuỗi kí tự

- Khi ta dùng toán tử >> sẽ để lại kí tự trắng trên dòng nhập, nó sẽ làm trôi biến chuỗicần nhập phía sau Vì vậy ta phải dùng hàm cin.get() ở dạng 1 hoặc cin.ignore() đểloại kí tự trắng ra khỏi dòng nhập

Ví dụ :

int a ; cin>>a ; char ten[30] ; cin.ignore() ; cin>>ten ;

Trang 14

1.9 Dữ liệu kiểu cấu trúc, hợp và liệt kê

1.9.1 Dữ liệu kiểu cấu trúc - struct

Dữ liệu kiểu cấu trúc là kiểu dữ liệu do người dùng định nghĩa bao gồm nhiều thành phần

có các kiểu dữ liệu khác nhau

- Cú pháp định nghĩa kiểu dữ liệu cấu trúc :

float DTB ; };

- Khai báo biến có kiểu dữ liệu là cấu trúc :

- Để truy cập vào các thành phần của cấu trúc ta dùng toán tử thực hiện như sau:

ds[1].hoten=”Le Van An”;

1.9.2 Dữ liệu kiểu hợp - union

union là kiểu dữ liệu do người dùng định nghĩa, mà nhiều biến khác nhau cùng dùng

chung một vùng nhớ với mục đích tiết kiệm bộ nhớ

- Cú pháp định nghĩa kiểu dữ liệu hợp:

unsigned char byte_thap ;unsigned char byte_cao;

unsigned int address;

};

Với ví dụ trên ta thấy 3 biến byte_thap, byte_cao, address đều dùng chung một vùngnhớ 2 byte trong đó: ô nhớ thứ nhất là biến byte_thap ; ô nhớ thứ 2 là byte_cao, cả 2 ônhớ là address

Ngày đăng: 24/03/2018, 21:54

TỪ KHÓA LIÊN QUAN

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

w