Top Banner
Nguyễn Công Huy – Khoa CNTT&TT 1 CÁC ĐẶC ĐIỂM CÁC ĐẶC ĐIỂM CỦA C++ CỦA C++ Các khái niệm cơ bản của C++ Lập trình cấu trúc trong C++ Các đặc điểm mới của C++ Chương 1 Chương 1 : :
48

giao trinh c++ Chuong1

Aug 02, 2015

Download

Documents

Bê Nguyễn
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 1

CÁC ĐẶC ĐIỂM CÁC ĐẶC ĐIỂM CỦA C++CỦA C++

Các khái niệm cơ bản của C++

Lập trình cấu trúc trong C++

Các đặc điểm mới của C++

Chương 1Chương 1::

Page 2: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 2

Nội dungNội dung

Các khái niệm cơ bản trong C++ Cấu trúc điều khiển Hàm và cấu trúc chương trình Con trỏ và chuỗi ký tự Tham số mặc nhiên của hàm Tái định nghĩa hàm Hàm tại chổ (inline) Truyền tham số Tham chiếu Struct

Page 3: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 3

Các khái niệm cơ bản

Từ khóa Dành riêng cho ngôn ngữ không được đặt tên

trùng với từ khóa. Là chữ thường

VD : char, int, return, for, else, const, static

Tên Phân biệt chữ HOA và chữ thường Gồm chữ, số, ‘_’ và phải bắt đầu bằng chữ cái. Độ dài tối đa là 32 Nên theo quy cách đặt tên.

VD: x, hoten, a1, num_of_var, Delta, TEN, ...

Page 4: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 4

Các khái niệm cơ bản

Kiểu dữ liệu

Tên kiểuTên kiểu Kích thướcKích thước Phạm viPhạm vi

char 1 byte -128 127

unsigned char 1 byte 0 255

int 2 bytes -32768 32767

unsigned int 2 bytes 0 65535

short 2 bytes 0 65535

long 4 bytes -231 231 - 1

unsigned long 4 bytes 0 232 - 1

float 4 bytes 1.2e-38 3.4e38

double 8 bytes 2.2e-308 1.8e308

Page 5: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 5

Các khái niệm cơ bản

Biến Khai báo : bất kỳ vị trí nào trong chương trình Khởi tạo : có thể vừa khai báo và khởi tạo

VD: int x=5, y=10;

for( int i=0, tong =0 ; i<10 ; i++) tong +=i ;

Biến khai báo trong 1 khối lệnh : chỉ có phạm vi hoạt động trong khối lệnh đó.VD: if( delta >0 ) {

float x1= (-b + sqrt(delta)) / (2*a); float x2= (-b - sqrt(delta)) / (2*a);

...

}

Page 6: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 6

Các khái niệm cơ bản

Biến Biến toàn cục : có tác dụng trong toàn bộ CT. Biến địa phương (cục bộ): chỉ có tác dụng

trong phạm vi của nó.VD: int so = 5;

void GanSo(int x) { so = x;

}int NuaSo(int x) { int c=2; int so =x/c ; return so;

}

Page 7: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 7

Các khái niệm cơ bản

Hằng Khai báo :

VD: #define MAX 100

const int MAX=100;

Một số hằng quan trọng : Số nguyên: 10 , -5, 300000, 1000L, ... Số thực : 3.1416, .5 , 123E-5, ... Ký tự : char ch1 = ‘A’ , ch2=97; Chuỗi ký tự :

char *str=“Chuoi Ky Tu”;

char chuoi[50]; strcpy(chuoi,“ ”);

if ( strcmp(chuoi,“”)==0)

cout << “Chuoi rong”;

Page 8: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 8

Các khái niệm cơ bản

Kiểu Chuyển đổi kiểu :

Mặc nhiên (tự động) :float x = 3.1416;

int y = x ; float sole = x - y; Do người lập trình sử dụng :

Cú pháp: ( Kiểu ) biểu thức( Kiểu ) biểu thức

hoặc Kiểu ( biểu thức )Kiểu ( biểu thức )

Ví dụ:int a=10, b=3;

float c1 = a / b ;

float c2 = float (a/b);

float c3 = (float) a / b ;

float c4 = float (a)/b;

Page 9: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 9

Các khái niệm cơ bản

Các phép toán Số học: + , - , * , / , % Luận lý: ==, !=, >, <, >=, <=, &&, ||, ! Gán : = Lấy kích thước: sizeof (đối tượng dữ liệu ) Điều kiện : e1 ? e2 : e3 Lấy địa chỉ : &(biến) Tăng giảm :

x++ , x-- , ++x , --x

tong+= i ; tich *= i;

/= , %= , -= , &= , |= , ^=

Page 10: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 10

Các khái niệm cơ bản

Mảng Khai báo :

<Kiểu> <Tên mảng> [<Kích thước>];<Kiểu> <Tên mảng> [<Kích thước>];

VD : int m[10]; float ds[MAX];

Sử dụng : phép toán lấy giá trị phần tử. Thứ tự phần tử : từ 0 đến (kích thước -1)

VD: // CT tính tổng của 10 số Fibonacci đầu tiên

long a[10]; a[0]=a[1]=1;

for (int i=2; i<10 ; i++)

a[i] = a[i-1] + a[i-2];

long tong=0;

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

tong+=a[i];

Page 11: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 11

Các khái niệm cơ bản

Chú thích Trên 1 dòng :

// chú thích trên 1 dòng

Trên nhiều dòng : /* chú thích trên nhiều dòng */

Các chỉ thị tiền biên dịch :# define # undefine # include

# if # else # endif

# if # elif # else # endif

# ifdef # else # endif

# ifndef # else # endif

# error

Page 12: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 12

Các khái niệm cơ bản

Nhập xuất Thư viện hàm : # include <iostream.h> Nhập : cin >> Biếncin >> Biến

Xuất : cout << (Biểu thức)cout << (Biểu thức)

Các kiểu dữ liệu có thể nhập xuất :char , int, unsigned, long, unsigned long, …

float, double, char* , char []

(void*): lấy địa chỉ đầu của chuỗi

Có thể nhập xuất liên tục trên một dòng.VD: cout << “Gia tri x = “ << x << “ , y = “ <<y;

cout << “Nhap n = “; cin >> n;

Page 13: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 13

Các khái niệm cơ bản

Nhập xuất Một số hàm định dạng toàn cục:

cin.width(n) cout.width(n) cout.precision(n) cin.seekg(n)

Ký tự đặc biệt : \n, \t, \0, \b, \r Định dạng khác: endl, ends, flush, …

Nhập chuỗi : gets(char* str); cin.getline(char* str, int n);

Page 14: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 14

Các khái niệm cơ bản

Cấu trúc 1 chương trình đơn giản

Page 15: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 15

Cấu trúc điều khiển

Tuần tự Câu lệnh : viết trên một hay nhiều dòng Khối lệnh :

Là dãy các lệnh viết trong cặp { } Tương đương với 1 câu lệnh

Giá trị của biểu thức điều kiện Bằng 0 : <=> SAI Khác 0 : <=> đúng

VD: int x=0; if(x=2)

cout<< “ x bang 2 “;else cout<< “ x khac 2 “;

Page 16: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 16

Cấu trúc điều khiển

Rẽ nhánh if (biểu thức)

Lệnh 1;

else Lệnh 2;

switch (biểu thức) { case ‘giá trị 1’ : Lệnh 1; ... [ break; ]

case ‘giá trị 2’ : Lệnh 2; ... [ break; ]...

case ‘giá trị n’ : Lệnh n; ... [ break; ]

default : Lệnh n+1;

}

Page 17: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 17

Cấu trúc điều khiển

Lặp while (biểu thức)

Lệnh ; do

Lệnh ;while (biểu thức);

for ( e1 ; e2 ; e3 ) Lệnh;

e1 : biểu thức khởi tạoe2 : biểu thức điều kiệne3 : biểu thức lặp

Page 18: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 18

Cấu trúc điều khiển

Từ khóa break Thoát ra khỏi cấu trúc switch Thoát ra khỏi vòng lặp : while, do while, for

Từ khóa continue: Trở về đầu vòng lặp

Lệnh nhảy goto Dùng chung với nhãn lệnh Không nên sử dụng vì sẽ phá vở cấu trúc CT Ưu điểm : thoát khỏi các vòng lặp lồng sâu

Page 19: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 19

Hàm và cấu trúc chương trình

Hàm Cú pháp :<Kiểu trả về> <Tên hàm> (Danh sách kiểu và tham số)

{ [ Khai báo dữ liệu cục bộ ] [ Thân hàm ] [ Câu lệnh return ]

}VD: int Max ( int x, int y) {

int somax; somax = (x>y) ? x : y; return somax;}

Page 20: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 20

Hàm và cấu trúc chương trình

Hàm Khai báo prototype :

<Kiểu trả về> <Tên hàm> ( Danh sách kiểu );

VD: int Max ( int , int ); int Min ( int , int ); void main() { int a =10 , b =5;

cout<<“So max= “<< Max(a,b)<<endl;

cout<<“So min= “<< Min(a,b)<<endl; } int Max (int x , int y) { ... } int Min (int x , int y) { ... }

Page 21: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 21

Hàm và cấu trúc chương trình

Hàm Cách gọi :

Tên hàm(tham số theo thứ tự từ trái

sang) Tham số và đối số:

int Max ( int x, int y) {

if(x>y) return x;

return y;

}

void main() {

int a =10 , b = 5;

cout<<“So max= “<< Max ( a , b ) << endl;

}

Tham số (hình thức)

Đối số (Tham số thực tế)

Page 22: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 22

Hàm và cấu trúc chương trình

Cấu trúc chương trình Chương trình theo dạng lập trình cấu trúc gồm

tập hợp nhiều hàm độc lập nhau. Hàm main() là hàm thực thi. Một chương trình chỉ có thể có 1 hàm main()

duy nhất. Dạng chung :

# include < Thư viện hàm >

Khai báo prototype;

Khai báo dữ liệu toàn cục

Định nghĩa các hàm đã khai báo.

Định nghĩa hàm main().

Page 23: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 23

Con trỏ và chuỗi ký tự

Khái niệm Con trỏ lưu địa chỉ của 1 đối tượng dữ liệu khác. Kích thước con trỏ = 1 ô nhớ của hệ điều hành. Trên MS-DOS, kích thước của con trỏ là 2 bytes.

Khai báo : < Kiểu> *<Tên con trỏ>; VD: long x = 20;

long *y; y = &x;

Các phép toán Địa chỉ : &&y Giá trị : y Giá trị dữ liệu mà con trỏ đang trỏ tới : **y

2020

1036H

x

10361036

1080H

*y

Page 24: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 24

Con trỏ

Cách tính địa chỉ int x=10; // Chẳng hạn biến x đang ở địa chỉ 1000 int *px = &x; // px =1000 (*px)++; // Gán x=11 px++; // px = 1002 vì px là con trỏ kiểu int px +=n; // px đang trỏ đến địa chỉ (1002 +

2*n )

Cấp vùng nhớ : Con trỏ = newnew <Kiểu> [ Số lượng ];

Ví dụ: int *px= new int;

long *py; py= new long[20]; Thu hồi vùng nhớ : deletedelete <con trỏ>;

Ví dụ: delete px; delete[] py;

Page 25: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 25

Con trỏ

Con trỏ và mảng Con trỏ là 1 mảng động => kích thước có thể thay đổi. Mảng như là 1 con trỏ nhưng độ lớn vùng nhớ cố định.

Cách sử dụng mảng và con trỏ gần như giống nhau

Cấp vùng nhớ vừa đủ

cho con trỏ

Thu hồi lại vùng nhớ

Page 26: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 26

Con trỏ

Mảng gồm 10 con trỏMảng gồm 10 con trỏ

Con trỏ đến 1 mảng Con trỏ đến 1 mảng 10 phần tử kiểu int10 phần tử kiểu int

Phân biệt mảng con trỏ và con trỏ đến mảng

Page 27: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 27

Con trỏ

Con trỏ đến con trỏ Tương tự (tổng quát hơn) mảng nhiều chiều. Cẩn thận khi cấp vùng nhớ.

Page 28: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 28

Con trỏ đến hàm

Là con trỏ đặc biệt dùng để trỏ đến địa chỉ mã lệnh thực thi của 1 hàm.

Khai báo con trỏ đến hàm phải đặt trong cặp dấu ngoặc. (*p):

int (*p1)(*p1) (const char *, const char *);

long (*p2)(*p2) (int a, int b);

Thường dùng con trỏ này để gọi 1 hàm và gửi hàm đó như là 1 đối số đến 1 hàm khác.

void check(char *a, char *b,

int (*cmp)(*cmp)(const char *, const char *));

Gọi hàm:check(“abc”,”ABC”, strcmp);

Page 29: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 29

Con trỏ đến hàm

Ví dụ

Gọi hàm check sử dụng con trỏ đến hàm như là 1 đối số

Page 30: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 30

Con trỏ void*

Có thể trỏ đến bất kỳ loại dữ liệu nào. Phải dùng phép ép kiểu khi thay đổi.

Page 31: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 31

Con trỏ và chuỗi ký tự

Chuỗi ký tự Là 1 mảng ký tự hay con trỏ ký tự

=> truy xuất phần tử của chuỗi tương tự như mảng.VD: char chuoi1[20], *chuoi2;

char c = chuoi1[0]; Phải cấp vùng nhớ cho chuỗi dạng con trỏ.

VD: chuoi2 = new char [50]; Chuỗi sẽ được đánh dấu bởi ký tự kết thúc : ‘\0\0’ Hàm nhập chuỗi :

gets(chuoi2);gets(chuoi2); cin.getline(chuoi2, 49);cin.getline(chuoi2, 49);

In chuỗi ra màn hình: cout<<chuoi1<<chuoi2;cout<<chuoi1<<chuoi2;

Page 32: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 32

Con trỏ và chuỗi ký tự

Chuỗi ký tự Một số hàm xử lý chuỗi trong <string.h>:

Copy chuỗi: char* strcpy (char* s1, char* s2);

Tạo bản sao: char* strdup (char* s1);

Chiều dài: int strlen (char* s);

So sánh: int strcmp (char* s1, char* s2);

Ghép chuỗi: char* strcat (char* s1, char* s2);

Đảo ngược: char* strrev (char* s);

Đổi sang HOA: char* strupr (char* s);

Đổi sang thường: char* strlwr (char* s);

Gán n ký tự c:

char* strnset (char* s, int c , int n);

Page 33: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 33

Tham số mặc nhiên

Khái niệm Gán các giá trị mặc nhiên cho các tham số của hàm.

Ưu điểm Không cần phải hiểu rõ ý nghĩa tất cả các tham số. Có thể giảm được số lượng hàm cần định nghĩa.

Khai báo tham số mặc nhiên Tất cả các tham số mặc nhiên đều phải đặt ở cuối hàm. Chỉ cần đưa vào khai báo, không cần trong định nghĩa.

Gọi hàm có tham số mặc nhiên Nếu cung cấp đủ tham số => dùng tham số truyền vào. Nếu không đủ tham số => dùng tham số mặc nhiên

Page 34: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 34

Tham số mặc nhiên

Ví dụMessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK )

Hàm thể hiện 1 cửa sổ thông báo trong Visual C++

MessageBox(“Hien thi thong bao ra man hinh");

MessageBox( “Chuc nang khong su dung duoc", “Bao loi“ );

Có thể gọi hàm theo các dạng sau:

MessageBox( “Ban muon thoat khoi chuong trinh?", “Thong bao“, MB_YESNO | MB_ICONASTERISK );

Page 35: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 35

Tham số mặc nhiên

Ví dụ

void Ham1 (int a=0, int b=1) { cout<<“tham so 1 = “<<a<<endl; cout<<“tham so 2 = “<<b<<endl;}void main() { int x=10, y=20; cout << “Goi Ham1 4 lan, ta duoc : “<<endl; Ham1(x,y); Ham1(x); Ham1(y); Ham1(); }

Page 36: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 36

Tái định nghĩa hàm

Khái niệmC++ cho phép định nghĩa các hàm trùng tên.

Quy tắc tái định nghĩa Các hàm trùng tên phải khác nhau về tham số:

Số lượng Thứ tự Kiểu

Quy tắc gọi hàm Tìm hàm có kiểu tham số phù hợp. Dùng phép ép kiểu tự động. Tìm hàm gần đúng (phù hợp) nhất.

Page 37: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 37

Tái định nghĩa hàm

Ví dụ 1

int Max (int a, int b) { return (a>b) ? a : b; }float Max (float a, float b) { return (a>b) ? a : b; }SinhVien Max (SinhVien a, SinhVien b) { return (a.diemtb > b.diemtb) ? a : b; }

void main() { int x1=1, y1=2; float x2=3, y2=4; long x3=5, y3=6; cout << Max(x1,y1)<<“\t”<<Max(x2,y2)<<endl; cout << Max(x3,y1) <<endl; cout << Max(x3,y2) <<endl; cout << Max(x3,y3) <<endl;}

Page 38: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 38

Tái định nghĩa hàm

Ví dụ 2

int F (int a=0, int b=1)

{ … }

float F (float a=5, float b=9)

{ … }

void main() {

int x1=1, y1=2;

float x2=3, y2=4;

long x3=5, y3=6;

cout << F(x1)<<“\t”<<F(y2)<<endl;

cout << F(x3) << F() << endl;

}

Page 39: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 39

Hàm inline

Là 1 hàm nhưng tác dụng tương tự như một macro. Khắc phục được các nhược điểm của hàm và macro. Giảm thời gian thực thi chương trình. Tăng kích thước của mã lệnh thực thi. Chỉ nên định nghĩa inline khi hàm có kích thước nhỏ. Cú pháp : thêm từ khóa inline vào trước hàm.

VD: inlineinline float sqr(float x) {

return (x*x);

}

inlineinline int Max(int a, int b) {

return ((a>b) ? a : b) ;

}

Page 40: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 40

Tham chiếu

Khái niệm Là 1 loại đối tượng dữ liệu “tham chiếu” đến 1

đối tượng có sẵn. Là 1 bí danh như con trỏ, nhưng không cần có

tác tử *.VD: int x = 10;

int *px; px = &x;

int &rx = x;

3 cách thay đổi giá trị của x : x = 5;*px = 5;

rx = 5;

1010

1036H

x

10361036

1080H

*px

&rx

Page 41: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 41

Tham chiếu

Tham chiếu dùng như một biến Khởi tạo : int x=5; int &rx = x;

int &a; int &b=5; // SAI Tham chiếu hằng : không thể sửa đổi giá trị.

const int &n=10; <=> int x=3; const int &n=x;

n=5; // Báo lỗi vì n lúc này là hằng số Gán trị lại :

Không thể sửa đổi đối tượng tham chiếu. Chỉ là thay đối giá trị.

int x = 5, y = 20; int &rx = x;

rx = y; // Chính là gán x=20 // không phải là rx tham chiếu đến y

Page 42: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 42

Tham chiếu

Tham chiếu dùng như đối số của hàm Làm thay đổi giá trị của tham số. Hữu ích cho hàm trả về nhiều kết quả. Tiết kiệm được ô nhớ trung gian (tham số hình thức)

trong hàm.

void Nhap (int& a, float& b) { cout<< “Nhap tham so 1 : “; cin>>a; cout<< “Nhap tham so 2 : “; cin>>b; }void main() { int n; float m; Nhap( n , m ); }

Page 43: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 43

Tham chiếu

Tham chiếu dùng như trị trả về của hàm Đối tượng trả về vẫn bền vững khi hàm kết thúc. Trị trả về là 1 đối tượng toàn cục hay 1 vùng nhớ cục bộ.

VD: long a[1000];

long& GiaTri(int i) { return a[i]; }

void main() {

GiaTri(1) = 1; GiaTri(2) = 1;

for( int i= 3; i<1000; i++)

GiaTri(i) = GiaTri(i-1) + GiaTri(i-2);

}

=> Ích lợi : che đi cách biểu diễn của dữ liệu.( Chẳng hạn : ta đổi lại dùng CTDL là danh sách liên kết

=> chỉ viết lại hàm GiaTri(int ) mà thôi )

Page 44: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 44

Truyền tham số

Truyền theo giá trị Giá trị tham số khi ra khỏi hàm sẽ không thay đổikhông thay đổi.

void Swap1(int a, int b) { int temp = a; a = b; b = temp;}

void main(){ int x = 5, y = 10; Swap1( x , y ); cout << “ x = “ << x << “ y = “ << y << endl;}

55

1010

xx

yy

aa

bb

mainmain Swap1Swap1

STEP STEP 0101

55

1010

xx

yy

55

1010

aa

bb

mainmain Swap1Swap1

STEP STEP 0202

55

1010

xx

yy

1010

55

aa

bb

mainmain Swap1Swap1

STEP STEP 0303

Page 45: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 45

Truyền tham số

Truyền theo địa chỉ (con trỏ) Giá trị tham số khi ra khỏi hàm có thể thay đổicó thể thay đổi.

void Swap2(int* a, int* b) { int temp = *a; *a = *b; *b = temp;}

void main(){ int x = 5, y = 10; Swap2( &&x , &&y ); cout << “ x = “ << x << “ y = “ << y << endl;}

55

1010

xx

yy

aa

bb

mainmain Swap2Swap2

STEP STEP 0101

100

200

55

1010

xx

yy

100100

200200

aa

bb

mainmain Swap2Swap2

STEP STEP 0202

100

200

1010

55

xx

yy

100100

200200

aa

bb

mainmain Swap2Swap2

STEP STEP 0303

100

200

Page 46: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 46

Truyền tham số

Truyền theo tham chiếu: Giá trị tham số khi ra khỏi hàm có thể thaycó thể thay đổi.

void Swap3(int&& a, int&& b) { int temp = a; a = b; b = temp;}

void main(){ int x = 5, y = 10; Swap3( x , y ); cout << “ x = “ << x << “ y = “ << y << endl;}

55 1010xx yy

mainmain

STEP STEP 0101

aa bb

Swap3Swap3

1010 55xx yy

mainmain

STEP STEP 0202

aa bb

Swap3Swap3

1010 55xx yy

mainmainSTEP STEP

0303

Page 47: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 47

Struct

Khái niệmStruct Là 1 dạng cấu trúc dữ liệu mà bản thân có thể chứa nhiều loại dữ liệu có kiểu khác nhau.

Khai báo

SinhVien a;

2 bytes

2 bytes

4 bytes

8 bytes

diemtb

namsinh

*hoten

masosv[]

Page 48: giao trinh c++ Chuong1

Nguyễn Công Huy – Khoa CNTT&TT 48

Struct

Biến kiểu struct :SinhVien a, b, ds1[20], *ds2;

Truy xuất các thành phần của struct :cin >> a.masosv;

cout << “Tuoi cua b la : “<<b.tuoi;

cin >> ds[19].namsinh;

ds2->hoten = new char[50];

Gán struct :SinhVien c = a;

Con trỏ struct :SinhVien *ds= new SinhVien[100];