LP TRÌNH HƯNG ĐI TƯNG TRONG C++ Đng Thành Trung B môn CNPM – Khoa CNTT trungdt@gmail.com.

Презентация:



Advertisements
Похожие презентации
BÀI 2 CÁC THƯC ĐO CƠ BN V LÃI SUT GVGD: TS. Nguyn Anh Tun TRƯNG ĐI HC KINH T, ĐHQGHN KHOA TÀI CHÍNH – NGÂN HÀNG MÔN KINH T HC TIN T - NGÂN HÀNG.
Advertisements

Ôn tp ngôn ng C Mc tiêu Ôn tp v các khaí nim cơ bn v lp trình Ôn tp cú pháp C. Ôn tp k thut vit chương trình C. Ôn tp k thut vit hàm C. Ôn tp k thut phân.
NI DUNG 12 MÔ HÌNH IS - LM GVGD: TS. Nguyn Anh Tun TRƯNG ĐI HC KINH T, ĐHQGHN KHOA TÀI CHÍNH – NGÂN HÀNG MÔN KINH T HC TIN T - NGÂN HÀNG.
NI DUNG 7 NGÂN HÀNG THƯƠNG MI VÀ CUNG NG TIN T GVGD: TS. Nguyn Anh Tun TRƯNG ĐI HC KINH T, ĐHQGHN KHOA TÀI CHÍNH – NGÂN HÀNG MÔN KINH T HC TIN T - NGÂN.
Bài 1. Tng quan v giao tip Hà ni, tháng 9 n ă m 2010.
Bài 2: NHNG K NĂNG GIAO TIP C Ơ BN Hà Ni, tháng 9 năm 2010.
1 Chương 3 H tr cơ bn v OOP ca Borland C++. 2 Mc tiêu Đn cui chương, bn có th: Nhn dng đưc nhng khác bit gia C chun và C++. Đnh nghĩa đưc lp và s dng.
1 Hàm ly giá tr tuyt đi ABS(N)N là s / biu thc s Ví d: =ABS(-25)kt qu 25 =ABS(5-149)kt qu 144 Hàm ly căn SQRT(N) N là s / biu thc s (N>0) Ví d: SQRT(25)
NI DUNG 8 NGÂN HÀNG TƯ VÀ CUNG NG TIN T GVGD: TS. Nguyn Anh Tun TRƯNG ĐI HC KINH T, ĐHQGHN KHOA TÀI CHÍNH – NGÂN HÀNG MÔN KINH T HC TIN T - NGÂN HÀNG.
H thng thông tin trong doanh nghip H thng thông tin trong doanh nghip Nhóm BkIT Cn2.2 Nhóm BkIT Cn2.2 Created by TunTun.
Bài 2: NHNG K NĂNG GIAO TIP C Ơ BN Hà Ni, tháng 9 năm 2010.
Trưng: ĐI HC HI PHÒNG Lp: ĐHSP HÓA HC K12 Nhóm : Nguyn Th Anh, Ngô Th Thái Giang, Đ Th Lan Hương Nguyn Th Tho, Nguyn Th Tuyt, Vũ Diu Vân.
17-1 T giá T giá là giá c ca mt đng tin này tính bng đng tin khác Ví du: 1 USD = VNĐ Đng tin yt giá: Là đng tin có có s đơn v c đnh là 1 Đng tin.
Ngôn ng C ThS. Nguyn Hà Giang CNTT - HUTECH. Nguyen Ha Giang Ni dung 1.Cu trúc chương trình C# 2.Kiu d liu, t khoá, đnh danh bin, hng… 3.Chuyn.
BÀI 3 Lý thuyt lưng cu tài sn GVGD: TS. Nguyn Anh Tun TRƯNG ĐI HC KINH T, ĐHQGHN KHOA TÀI CHÍNH – NGÂN HÀNG MÔN KINH T HC TIN T - NGÂN HÀNG.
Bài 2: K NĂNG THUY T TRÌNH Hà Ni, tháng 9 năm 2010.
Chương 6 CÁN CÂN THANH TOÁN QUC T. Gii thiu chung Cán cân thanh toán quc t (BoP) ch s kt vĩ mô qtrng đi vi các nhà hoch đnh cs kt trong mt nn kt m Có.
BÀI 01:(2Tit) PTTK CSDL& MS-ACCESS BÀI 02:(4Tit) TO CSDL, TABLE, &RELATIONSHIP BÀI 03:(2Tit) KHÁI QUÁT QUERY BÀI 05: (6Tit) QUERY CAO CP BÀI 06:(2 Tit)
CHƯƠNG 3 CÂN BNG TO PHC TRONG DUNG DCH. BÀI I: MT S KHÁI NIM CHUNG V PHC CHT 1.Đnh Nghĩa Trong dung dch, các phc cht đưc to thành do s tương tác ca nhiu.
CHƯƠNG 5 TH TRƯNG NGOI HI & T GIÁ HI ĐOÁI. GII THIU CHUNG Cung Ngưi bán Cu Ngưi mua Hàng hóa và dch v Tin Vn đ 2 quc gia khác nhau.
Транксрипт:

LP TRÌNH HƯNG ĐI TƯNG TRONG C++ Đng Thành Trung B môn CNPM – Khoa CNTT

………………………………………………… ………………………………………………… ………………………………………………… ………………………………………………… ………………………………………………… ………………………………………………… ………………………………………………… ………………………………………………… ………………………………………………… ………………………………………………...

Ni dung chương trình Chương 1: Gii thiu v lp trình hưng đi tưng. Chương 2: Nhng vn đ cơ bn trong C++. Chương 3: Đi tưng và lp Chương 4: Tha k Chương 5: Các kiu quan h Chương 6: Đa hình Chương 7: Khuôn hình Chương 8: Qun lý b nh Chương 9: Mng Chương 10: Bt ngoi l Chương 11: Stream và File Chương 12: Thit k hưng đi tưng

Yêu cu 2 bài kim tra gia k (h s 1) Bài tp ln (h s 3)

Tài liu tham kho The Waites Groups Object-Oriented Programming in C++, 3rd edition, Robert Lafore, SAMS. C++ Programming Language, 3rd edition, Bjarne Stroustrup, Addison-Wesley Practical C++ Programming, Steve Oualline Lp trình hưng đi tưng, Phm Văn t

CHƯƠNG 1: GII THIU V LP TRÌNH HƯNG ĐI TƯNG (OBJECT-ORIENTED PROGRAMMING IN C++)

Ni dung chương 1 Ti sao phi lp trình hưng đi tưng Đc đim ca lp trình hưng đi tưng C và C++

1.Ti sao phi lp trình hưng đi tưng Chương trình vit bng các ngôn ng hưng th tuc (C, Pascal...) bao gm mt chui các câu lnh nhm yêu cu máy tính thc hin mt nhim v nào đó. Chia chương trình thành các hàm. Mi hàm phc v cho mt nhim v c th và có giao din (interface) rõ ràng. Nhóm mt s các hàm li thành các mô-đun hoc các thành phn (component).

Ti sao phi lp trình hưng đi tưng … Nhưc đim ca ngôn ng lp trình hưng cu trúc: Hàm không hn ch truy nhp ti các bin toàn cc. Hàm và d liu không có quan h vi nhau. Không th xây dng nhng kiu d liu phc tp. Ví d: Kiu Point gm hai ta đ x và y. Không th thc hin các phép tính trên kiu Point.

2. Đc đim ca lp trình hưng đi tưng Ngôn ng lp trình hưng đi tưng kt hp d liu và các hàm thao tác trên d liu này; gi là đi tưng. Các hàm ca đi tưng - gi là các hàm thành viên (member function), cung cp phương thc đ truy nhp d liu ca đi tưng. Các thành phn d liu thưng đưc gi là các thuc tính (attribute hoc instance variable). Vic gi hàm thành viên ca mt đi tưng đưc xem như vic gi thông đip ti đi tưng đó (sending a mesage). Trong mt chương trình C++ thưng cha mt s các đi tưng, chúng giao tip vi nhau thông qua vic gi thông đip.

Mô hình hưng đi tưng Data Member Function Object Data Member Function Object Data Member Function Object

Đc đim ca ngôn ng lp trình hưng đi tưng Lp trình hưng đi tưng ch quan tâm đn vic chương trình cha nhng đi tưng nào. Đi tưng là thành viên ca lp (class). Lp là mt mô t ca các đi tưng tương t nhau. Mt lp có th đưc chia thành nhiu lp con. Mt lp có th k tha t nhiu lp khác. Lp gc đưc gi là lp cơ s (base class) Llp tha k t lp cơ s gi là lp dn xut (derived class). Lp trình hưng đi tưng cho phép ta to ra kiu d liu mi và thc hin các thao tác trên chúng mt cách d dàng.

3. C và C++ C++ tha k t ngôn ng C. Nhng câu lnh trong C có th đưc áp dng trong C++. Nhng thành phn đưc b sung vào C đ tr thành C++ bao gm: Lp Đi tưng Lp trình hưng đi tưng

CHƯƠNG 2: NHNG VN Đ CƠ BN TRONG C++

Ni dung chính Cu trúc chương trình Bin Toán t Các câu lnh Structure Hàm

1. Cu trúc chương trình Xét ví d sau: #include using namespace std; int main() { cout << Hello world \n; return 0; } Hàm Câu lnh: kt thúc bi du ; #include: yêu cu chương trình dch chèn thêm file vào mã ngun. using namespace cout nm trong namespace std; Câu chú thích: Câu chú thích bt đu bng du // hoc nm trong /* */.

2. Bin Phi khai báo bin trưc khi s dng Có th khai báo bin mi nơi trong chương trình Tên bin Phân bit ch hoa, ch thưng S dng các ký t t a-z, 0-9 và du _ Ví d: int var1; int var2=10;

Kiu d liu đơn gin Kiu nguyên: int, long, short Kiu ký t: char – lưu mã ASCII ca ký t Ký t nm trong du. Ví d: a Ký t đc bit: \n, \tab, \\, \, \, … Kiu không du: unsigned char, unsigned int, unsigned short, unsigned long Kiu du phy đng: float, double, long double Kiu bool: có giá tr True/False

Kiu d liu đơn gin … TypeLowHighBytes char short int long float3.4x x double1.7x x long double 3.4x x

Ép kiu C++ là ngôn ng đnh kiu mnh (). Ví d: double pi=3.14; // đúng double x=Hello; // sai Ép kiu t đng Ví d: int i = 17; float x = i; // gán 17 cho x int j = 2; float y = i/j; // gán 17/2 = 8 cho y, không phi là 8.5 Thc hin phép toán trên 2 toán hng có kiu khác nhau thì toán hng có kiu thp hơn s t đng b ép v kiu cao hơn. T ép kiu Ví d: float z = static_cast (i)/j; // ép i thành kiu float trưc khi chia

Bin hng (Constant Variables) Giá tr ca hng không thay đi. Có 2 cách khai báo hng: const float PI=3.14; #define PI 3.14 Đnh nghĩa đu chương trình Không xác đnh kiu ca PI

S dng cout cout là mt đi tưng đưc đnh nghĩa trưc trong C++, tương ng vi lung ra chun (standard output stream). Toán t << là toán t chèn, đnh hưng ni dung cn hin th. Ví d: string str=Hello world; int i=8; cout << str << endl; // endl (hoc \n) là du hiu xung dòng. cout << i= << i << endl; Đ đnh dng ni dung hin th, s dng setw (nm trong iomanip) cout<< setw(12) << str << setw(5) << i; Kt qu: Hello world 8 Đ xác đnh đ chính xác, s dng setprecision cout<< setprecision(3) << str << setw(5) << 10.0/3.0; Kt qu: Hello world 3.33

S dng cin cin là toán t đưc đnh nghĩa trưc trong C++, tương ng vi lung vào chun (standard input stream). Toán t >> đưa ni dung t lung vào chun vào bin. Ví d: int temperature; cout << Enter temperature in Celsius: ; cin >> temperature;

Header File và Library File Mt s nhim v đưc thc hin bi Library Function. Header File cha khai báo các hàm mà ta cn s dng trong chương trình. Ví d: #include #include myprog.h <>: yêu cu chương trình dch tìm t thư mc chun. : yêu cu chương trình dch tìm t thư mc hin ti. Nu không include Header File thích hp thì chương trình dch s báo li.

myprog.cpp somelib.h myprog.h #include #include myprog.h myprog.obj myprog.exe cs.lib user header file compiler linker library header file library fileobject file executable file

3. Toán t Toán t toán hc Toán t quan h Toán t logic

Toán t toán hc +, -, *, /, % Ví d: int i = 1/3; // kt qu i = 0 float x = 1.0/3; // kt qu x= int j = 7 % 3; // kt qu j=1 ++, -- Ví d: int i=3; int j=7; cout << 10 * i++; // hin th 30, sau đó i=4 cout << 10 * ++j; // hin th 80, sau đó j=8 +=, -=, *=, /= Ví d: float x=6.0; x+=3.5; tương t x=x+3.5;

Toán t quan h So sánh 2 giá tr. Kt qu tr v là true hoc false >, =, <= Ví d: int x=44; int y=12; (x == y) // false (x >= y) // true (x != y) // true

Toán t logic logical and : && (x >= 5) && ( x <= 15) // true nu x nm trong [5,15] logical or : || (x == 5) || ( x == 10) // true nu x=5 hoc x=10 logical negation : ! ! (x == 5) // true nu x khác 5 Tương t x != 5 Toán t điu kin (conditional operator) : ? … : ? : Ví d: min = (alpha<beta) ? alpha : beta; Tương t if (alpha < beta) min = alpha; else min = beta;

4. Các câu lnh Vòng lp R nhánh Mt s lnh điu khin khác

Vòng lp for increment expressiontest expressioninitialization expression for ( i=0; i<15; i++ ) initialization expression body of loop increment expression test expression exit true false Có th đt nhiu biu thc trong các phn ca vòng for ( ; ; ); các biu thc đó cách nhau bi du phy. Ví d: for(int j=0, float alpha=100.0; j<50; j++, alpha--) { // body for }

Vòng lp for... int i; for (i=1; i<=15; i++) // thân vòng lp for có 1 lnh cout << i*i << ; cout << endl; for (i=1; i<=15; i++) // thân vòng lp for có nhiu lnh { cout << setw(4) << i << ; // setw(n) gán kích thưc ca trưng hin th bng n int cube = i*i*i; cout << setw(6) << cube << endl; }

Vòng lp while Vòng lp while đưc s dng khi không bit trưc s ln lp. Lp cho đn khi biu thc kim tra vn có giá tr True. Ví d: char c=n; while ( c != y) { cout << Do you want to continue: (y/n) << endl; cin >> c; }

Vòng lp while... test expression while ( c != y ) { … } body of loop test expression exit true false

Vòng lp do Trong vòng lp do, biu thc kim tra đưc đánh giá cui vòng lp. Thân vòng lp đưc thc hin ít nht mt ln. Ví d: char c; do { cout << Do you want to continue: (y/n) << endl; cin >> c; } while ( c != y);

Vòng lp do... body of loop test expression do { … } while ( c != y ); test expression exit true false

If … Else Ph thuc vào điu kin kim tra là true hay false đ quyt đnh nhánh thc hin Ví d: int x; cout << Enter a number: ; cin >> x; if ( x > 100) cout << x << is greater than 100 << endl; else cout << x << is not greater than 100 << endl;

If … Else test expression if ( x > 100) { … } else { … } body of if test expression exit true false body of else

Lnh switch Lnh switch đưc s dng khi có nhiu nhánh r ph thuc vào giá tr ca cùng mt bin. switch( ) { case : … break; case : … break; default : … }

Lnh switch... char c; cout << Enter your choice (a/b/c) : ; cin >> c; switch (c) { case a: cout << You picked a! << endl; break; case b: cout << You picked b! << endl; break; case c: cout << You picked c! << endl; break; default: cout << You picked neither a,b,c ! << endl; }

Lnh switch... variable equals const 1 exit true false first case body variable equals const 2 true false second case body default body

Mt s lnh điu khin khác break: thoát khi vòng lp hoc switch continue: tr li đu vòng lp. goto: nhy ti mt nhãn xác đnh

5. Structure Structure là mt tp hp các bin đơn gin, tương t như record trong Pascal. Khai báo Structure: struct part { int modelnumber; int partnumber; float cost; }; Đnh nghĩa bin kiu Structure: part part1; Khi to các thành phn ca Structure: part part1={6244, 373, }; Truy cp vào các thành phn ca Structure part1.modelnumber = 6244; part.modelnumber = 6244; //sai Hai bin cùng kiu structure có th gán cho nhau part part2; part2=part1;

Structure lng Thành phn ca Structure có th là mt structure khác. struct Distancestruct Room{ int feet; Distance length; float inches; Distance width;}; Truy cp vào các thành phn ca Structure lng Room dining; dining.length.feet=13; Khi to Structure lng: Room dining = {{13, 6.5}, {10, 0.0}};

Enumeration Đnh nghĩa enum: enum days_of_week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; Khai báo bin kiu enum days_of_week day1, day2; Giá tr ca các bin kiu enum là nhng giá tr mà enum đã đnh nghĩa trưc. Các giá tr ca enum đưc lưu dưi dng s nguyên, bt đu t 0. Ta có th thay đi giá tr nguyên ca giá tr đu trong enum enum days_of_week {Sun=1, Mon, Tue, Wed, Thu, Fri, Sat}; days_of_enum day=Mon; cout << day; // Hin th 2

6. Hàm Khai báo hàm xác đnh tên hàm, kiu tr v, và các tham s cn thit trong li gi hàm. Khai báo hàm thưng nm trong Header File (.h) Đnh nghĩa hàm cha thân hàm. Đnh nghĩa hàm thưng nm trong source file (.cpp) Ví d int fac(int n); // function declaration int fac(int n) // function definition { int result=1; for (int i=1; i<=n; i++) result*=i; return result; } int x=7; cout << fac( << x <<)= << fac(x); // call to a function;

Truyn tr (Passing by Value) Khi truyn tr, hàm s to ra mt bin cc b đ lưu giá tr ca bin đưc truyn. Giá tr ca bin đưc truyn không thay đi. Ví d: void f(int val) { val++; } int x=4; f(x); cout << x; // x = 4

Truyn tham chiu (Passing by Reference) Tham chiu cung cp bí danh (alias) cho bin. Khi truyn tham s theo kiu tham chiu thì bin cc b là bí danh ca bin đưc truyn. Đa ch ca bin đưc truyn cho hàm. Hàm có th truy cp trc tip trên bin đưc truyn. Ví d: void swap (int & a, int& b) { int tmp; tmp = a; a = b; b = tmp; } int x=3; int y=5; swap(x,y); // a,b là bí danh ca x,y

Tham s hng Tham chiu hng không cho phép hàm thay đi giá tr ca bin đưc truyn. Ví d: void f( int& a, const int& b ) // b là tham s hng { a=5; // ok b=7; // fail }

Chng hàm (Overloaded Function) Hàm chng thc hin các nhim v khác nhau ph thuc vào các tham s truyn. Ví d: void print(int a) // in s nguyên { cout << integer : << a; } void print(string s) // in xâu ký t { cout << string : << s; }

Inline Fuction main() …. Function1() …. Function1() …. Function1() …. Function1() main() …. inline float Function1(int a, int b); float Function1(int a, int b);

Hàm có tham s mc đnh #include double logn (double x, double base=10) // mc đnh gán base = 10 { return log(x)/log(base); } double y=5.6; cout << log(y) = << logn(y) << endl; // s dng giá tr mc đnh cout << ln(y) = << logn(y, ) << endl; // base = e cout << ld(y) = << logn(y,2) << endl; // base = 2

Phm vi ca bin Mt khi lnh (block) nm trong du { … } Phm vi ca bin là khi lnh mà bin đưc khai báo Bin đưc khai báo ngoài hàm là bin toàn cc (global variable). Khai báo bin block trong s n khai báo bin trùng tên block ngoài.

Phm vi ca bin … int x; // global variable int main() { int i=3; // local variable { int j=5; // local variable int i=7; // local i n bin i ngoài cout << i; // hin th 7 } // kt thúc phm vi ca j và i trong cout << i; // hin th 3 } // kt thúc phm vi ca i ngoài

CHƯƠNG 3: LP (Class)

Ni dung chính Lp và các thành phn ca lp Cài đt các thành phn ca lp Các thành phn tĩnh ca lp Lp lng Đi tưng Hàm to và hàm hu S dng đi tưng

1. Lp và các thành phn ca lp Lp trong C++ cho phép ngưi lp trình t đnh nghĩa các kiu d liu phc tp (user- defined types) và đưc s dng tương t như kiu d liu có sn (built-in data types). Lp thưng đưc s dng đ đnh nghĩa các vn đ tru tưng như: s phc, ngày tháng, vector … Lp cho phép tách ri phn cài đt (implementation) và phn giao din (interface).

Đnh nghĩa lp … Mt lp có cha d liu (member data) và hàm (member function). Class data1 data2 data3 functiona() functionb() functionc()

Khai báo lp class Employee // khai báo tên lp { private: // t khóa cho bit không th truy nhp t ngoài lp unsigned int EmpID ; // member data char EmpName[30]; float EmpSalary; public: // t khóa cho bit có th truy nhp t ngoài lp void AddEmployee(); // member function };

Điu khin truy nhp Class private: public: data1 data2 functiond() functiona() functionb() functionc() Phn đưc khai báo vi t khóa private ch đưc truy nhp bi các hàm thành phn ca cùng class Phn đưc khai báo vi t khóa public có th đưc truy nhp ti bt k nơi nào trong chương trình

n d liu n d liu là k thut bo v d liu khi nhng truy nhp không hp l. Đt d liu vào lp vi t khóa private D liu private ch đưc truy nhp bên trong lp D liu hoc hàm public có th đưc truy nhp t bên ngoài lp.

2. Cài đt các thành phn ca lp D liu thành phn Nên đưc khai báo vi t khoá private. Không đưc khi to giá tr ca d liu thành phn trong đnh nghĩa lp.

Cài đt các thành phn ca lp Hàm thành phn void Product :: Display (void) { cout << ProductName; } Cài đt bên ngoài lp Cài đt bên trong lp Cài đt bên ngoài lp thưng đơn gin và d hiu hơn

3. Các thành phn tĩnh ca lp D liu thành phn tĩnh Là thành phn d liu có giá tr như nhau đi vi tt c các đi tưng ca lp. S tn ti ca d liu thành phn tĩnh không ph thuc vào s tn ti ca đi tưng thuc lp. Sau khi khai báo thành phn d liu tĩnh trong lp, phi khi to giá tr cho nó bên ngoài lp.

Ví d: thành phn d liu tĩnh

Các thành phn tĩnh ca lp Hàm thành phn tĩnh Dùng đ truy nhp ti các d liu thành phn tĩnh. Luôn đưc đnh nghĩa bên ngoài lp

Ví d: hàm thành phn tĩnh

4. Lp lng Là lp đưc khai báo hoc đnh nghĩa trong mt lp khác. Đi tưng ca lp bên ngoài có cha tham chiu ti đi tưng ca lp lng. Các thành phn ca lp lng đưc khai báo và đnh nghĩa tương t lp bên ngoài

Ví d: khai báo lp lng

5. Đi tưng Đi tưng là mt th hin c th ca mt lp S dng toán t. đ truy nhp vào các thành phn ca đi tưng Chú ý: phm vi truy nhp (public/private)

Ví d: Khai báo đi tưng

Đi tưng ca lp lng Nu lp lng đưc khai báo vi t khoá private thì đi tưng ca lp lng ch đưc to ra trong thân ca lp ngoài. Các quy tc truy nhp khác vn đưc áp dng

6. Hàm to (Constructor) Hàm to là mt hàm thành phn đưc t đng vin dn khi khi to mt đi tưng mi ca lp. Hàm to phi có tên trùng vi tên lp và không có giá tr tr v. Nu không khai báo hàm to thì mt hàm to mc đnh s t đng đưc to ra. Nu đã khai báo hàm to thì không t đng có hàm to mc đnh

Ví d: Hàm to mc đnh

Chng hàm to Mt lp có th có nhiu hàm to vi các tham s khác nhau (chng hàm to)

Hàm to vi giá tr mc đnh class Date { public: // hàm to vi các giá tr mc đnh ca day, month, year. Date(int d=1, int m=1, int y=1900); }; Date::Date(int d, int m, int y) : day(d), month(m), year(y) {} void main() { Date d1; // Date d2(5); // Date d3(15,8); // Date d4(12,10,1998); // }

Hàm to sao chép Hàm to sao chép khi to đi tưng da trên mt đi tưng khác thuc cùng lp. Mi lp có mt hàm to sao chép mc đnh – có mt tham s là đi tưng ca cùng mt lp. Ta có th đnh nghĩa li hàm to sao chép. Date(Date& d) Ví d void main() { Date d1(12,4,1997); Date d2(d1); // hàm to sao chép mc đnh Date d3=d1; // hàm to sao chép mc đnh }

Hàm hy (Destructor) Hàm hy t đng đưc gi khi đi tưng b hy Hàm hy thưng đưc s dng đ gii phóng b nh Ví d: class Date { public: Date(); // hàm to ~Date(); // hàm hy }; if { Date d1; } // kt thúc khi lnh hàm hy s đưc vin dn đ hy d1.

7. S dng đi tưng Đi tưng làm tham s đ truyn cho các hàm tương t như các kiu xây dng sn khác. class Date { int diff(Date d); // Tính khong thi gian gia hai ngày }; int Date::diff(Date d) { int n=day-d.day; n+= 30 * (month – d.month); n+= 365* (year – d.year); return n; } Date d1(14,5,2000); Date d2(10,4,2000); cout << d1.diff(d2) << endl;

Ví d: Đi tưng làm tham s class Date { void add_days (Date d, int n); // cng thêm n ngày }; void Date::add_days(Date d, int n) { day=d.day + n % 30; month = d.month + (n % 365) / 30; year = d.year + n / 365; } Date d1(14,5,2000); Date d2; d2.add_days(d1,65); // d2 gán bng

Ví d: Đi tưng làm tham s object d2 day month year object d1 day month year d2.add_days(d1,65); day d1.day Hàm thành phn ca d2 truy nhp trc tip ti d liu day ca nó Hàm thành phn ca d2 truy nhp ti d liu day ca đi tưng d1

Hàm tr v đi tưng class Date { Date get_date (int n); }; Date Date::get_date(int n) { Date temp; temp.day=day + n % 30; temp.month = month + (n % 365) / 30; temp.year = year + n / 365; return temp; } Date d1(14,5,2000); Date d2=d1.get_date(65); // d2 gán bng

Hàm thành phn hng Hàm thành phn đưc khai báo vi t khóa const thì s không th thay đi d liu ca đi tưng. class Date { int year() const; // const void add_year(int n); // non-const }; int Date::year() const { return year; } int Date::add_year(int n) { year+=n; }

Hàm thành phn hng... Const member function có th đưc c đi tưng const và non- const vin dn, nhưng non-const member function thì ch đưc các đi tưng non-const vin dn. void f(Date& d, const Date& cd) { int i=d.year(); // ok d.add_year(2); // ok int j=cd.year(); // ok cd.add_year(3); // error }

T tham chiu ( Self-Reference ) Mi hàm thành phn bit đi tưng nào vin dn nó và có th truy cp ti đi tưng đó mt cách rõ ràng thông qua con tr this. class Date { Date get_date (int n); }; Date Date::get_date(int n) { Date temp; temp.day=this.day + n % 30; temp.month = this.month + (n % 365) / 30; temp.year = this.year + n / 365; return temp; }

Chương 4: Tha k

Ni dung chính Tha k là gì? Cài đt tha k Đa tha k

1. Tha k là gì? C++ cho phép to ra mt lp mi t các lp đã tn ti. Lp B k tha lp A, có nghĩa là lp B s có các thuc tính và phương thc ca A, ngoi tr các thành phn private. Lp B đưc gi là lp con hay lp dn xut. Lp A đưc gi là lp cha hay lp cơ s.

Mt s kiu tha k

2. Cài đt tha k Cú pháp khai báo lp dn xut t mt lp cơ s như sau: class lp_dn_xut : mc truy nhp lp_cơ_ s Mc truy nhpThành phn đưc tha k t lp cơ s publicgi nguyên mc truy nhp protectedchuyn sang mc truy nhp protected privatechuyn sang mc truy nhp private

Ví d: tha k Lp Salary tha k hai phương thc ShowData() và Salary(). Trong lp Salary c hai phương thc này đu có mc truy nhp là protected.

Trong hàm to ca lp dn xut có th gi đn hàm to ca lp cơ s.

Gán đi tưng ca lp cơ s bng lp dn xut Sau phép gán, các thành phn chung ca hai đi tưng s có giá tr như nhau.

Gán đi tưng ca lp dn xut bng lp cơ s

Chú ý: phi chng toán t =

3. Đa tha k Lp B s có hai bn sao ca tt c các thành phn t lp X. Khi gi đn mt trong nhng thành phn này t lp B, chương trình dch s thông báo li. X A2A1 B

Gii quyt xung đt Gi tưng minh Ví d lp X có phương thc x đưc tha k Li gi x t mt đi tưng ca lp B B b; b.A1 :: x; b.A2 :: x; S dng lp cơ s o

Lp cơ s o Lp cơ s o đm bo trong lp dn xut ch to ra mt bn sao ca các thành phn đưc tha k t lp cơ s.

Lp cơ s o Hàm to ca lp cơ s ch đưc gi trong hàm to ca lp dn xut trc tip t nó. Hàm to ca lp cơ s o thì đưc gi tt c các lp dn xut nó. Quy tc như sau: Hàm to ca lp cơ s o đưc gi đu tiên Tip theo đó là hàm to ca các lp dn xut trc tip …

Chương 5: Các kiu quan h

Ni dung chính Quan h bn Quan h cu thành

1. Quan h bn Khi hai lp đưc khai báo là bn ca nhau thì các thành phn đưc đnh nghĩa trong mt lp s đưc truy nhp bi các thành phn lp kia. Quan h bn đưc khai báo gia các lp hoc gia lp và hàm. Quan h bn không có tính cht bc cu và tính cht giao hoán.

Ví d: Quan h bn Lp Employee khai báo lp Supervisor là bn. Lp Supervisor có th truy nhp ti các thành phn ca lp Employee.

Quan h bn … Khi hai lp đưc khai báo là bn ca nhau thì các thành phn đưc đnh nghĩa trong mt lp s đưc truy nhp bi các thành phn lp kia.

SetID gi đn ShowID() trong lp Supervisor. Cho nên, phn đnh nghĩa phương thc SetID s đưc vit cui cùng.

Quan h bn … Quan h bn còn cho phép các hàm thành phn ca mt lp có th truy nhp ti các hàm bên ngoài. Khi lp khai báo là bn ca mt hàm bên ngoài thì hàm đó có th truy nhp ti các thành phn private ca lp này.

Quan h bn Quan h bn gia hàm thành phn ca mt lp vi mt hàm khác.

2. Quan h cu thành C++ cho phép ta xây dng mt lp mà có các thành phn d liu ca nó là các lp khác. Quan h gia các lp này đưc gi là quan h cu thành.

//Li

Hàm to trong quan h cu thành Cú pháp: Lp_cha (các tham s) : lp con (các tham s), lp con (các tham s) { … }

Chương 6: Đa hình

Ni dung chính Đa hình là mt đc trưng ca ngôn ng lp trình hưng đi tưng. Đa hình tĩnh Chng hàm Chng toán t Đa hình đng Hàm o.

1. Chng hàm Là k thut s dng: Các hàm cùng tên Danh sách tham s khác nhau Danh sách tham s đưc phân bit theo: kiu d liu ca tham s th t ca tham s và s lưng tham s Đ thc hin các nhim v khác nhau. Khi xét các hàm chng, chương trình dch không xem xét đn kiu tr v ca hàm.

Overriding function Overload mt phương thc, tc là to ra nhiu phương thc có cùng tên nhưng khác nhau v danh sách tham s Override mt phương thc, tc là to ra mt phương thc trong lp dn xut có cùng prototype vi mt phương thc trong lp cơ s.

Ví d: Overriding function class Mammal { public: void Speak() {cout << Mamal;} }; class Dog : public Mammal { public: void Speak() {cout << Dog;} }; int main() { Mamal m; Dog d; m.Speak();// Mamal d.Speak();// Dog }

n phương thc ca lp cơ s Nu lp cơ s có mt phương thc b chng và lp dn xut li override phương thc này, thì phương thc ca lp dn xut s n tt c các phương thc ca lp cơ s có cùng tên vi nó.

Ví d: n phương thc ca lp cơ s class Mammal { public: void Move() {cout << Mamal moves 1 step;} void Move(int d) {cout << Mamal moves <<d<< steps;} }; class Dog : public Mammal { public: void Move() {cout << Dog moves 1 step;} }; int main() { Mamal m; Dog d; m.Move(); m.Move(10); d.Move(); d.Move(10);// li }

2. Chng toán t Chng toán t cho phép thc hin các phép tính trên nhng kiu d liu do ngưi s dng t đnh nghĩa cũng tương t như kiu d liu cơ bn khác. Cú pháp khai báo chng toán t: kiu_d_liu operator ký_hiu (danh sách tham s);

2.1. Chng toán t 1 toán hng Hàm chng toán t mt toán hng không có tham s. Ví d: chng toán t ++ (tin t hoc hu t)

2.2. Chng toán t 2 toán hng Hàm chng toán t hai toán hng có mt tham s. Tham s này là toán hng phía bên phi ca toán t. Hàm chng toán t đưc vin dn bi đi tưng phía bên trái ca toán t.

Chng toán t nhân

2.3. Chng toán t quan h class Date { bool operator==(Date d) { return (day==d.day) && (month==d.month) && (year==d.year); }; bool operator<(Date d) { if (year < d.year) return true; else if (year==d.year) && (month < d.month) return true; else return (month==d.month) && (day < d.day); };

3. Hàm o Khi mt hàm đưc đnh nghĩa là hàm o trong lp cơ s thì nó s đưc đnh nghĩa li trong lp dn xut. Khi nào s dng hàm o? Lp Parent và Child cùng có phương thc f Khai báo mt con tr thuc kiu ca lp Parent Parent* p; Con tr này tr đn đi tưng ca lp Child p = new Child; Sau đó, thc hin li gi p->f; Kt qu: f ca lp Parent s đưc vin dn Nu f đưc khai báo là hàm o trong lp Parent thì f ca lp Child s đưc vin dn.

Ví d: Không s dng hàm o class Mammal { public: void Move() {cout << Mammal moves 1 step;} }; class Dog : public Mammal { public: void Move() {cout << Dog moves 1 step;} }; int main() { Mamal* p = new Dog(); p->Move();// Mammal moves 1 step }

Ví d: S dng hàm o class Mammal { public: void virtual Move() {cout << Mammal moves 1 step;} }; class Dog : public Mammal { public: void Move() {cout << Dog moves 1 step;} }; int main() { Mamal* p = new Dog(); p->Move();// Dog moves 1 step }

Hàm thun o Lp cơ s tru tưng là lp cơ s không có đi tưng nào và ch s dng đ cho các lp khác k tha. Hàm thun o đưc khai báo trong lp s làm cho lp đó tr thành lp cơ s tru tưng. virtual kiu_tr_v tên_hàm(danh sách tham s) = 0; Tt c các lp dn xut đu phi đnh nghĩa hàm thun o.

Ví d: hàm thun o class Mammal { public: virtual void Move() = 0; }; class Dog : public Mammal { public: void Move() {cout << "Dog moves 1 step";} }; void main() { Dog p; p.Move();// Dog moves 1 step Mammal m;// L i m.Move(); }

Chương 7: Khuôn hình

Ni dung chính Khuôn hình cho phép xây dng các hàm và lp tng quát Khuôn hình hàm Khuôn hình lp

1. Đnh nghĩa khuôn hình Template cho phép đnh nghĩa mt hàm có đc đim chung. C++ s dng template đ to ra nhng th hin c th ca hàm khi cn thit. Ví d: đnh nghĩa hàm max template kind max(kind d1, kind d2) { if (d1 > d2) return (d1); return (d2); } Cu trúc báo cho C++ bit rng kind có th đưc thay th bi bt k kiu nào, k c là class hoc mt kiu bt k.

Đnh nghĩa khuôn hình… Ví d: S dng template main() { float f = max(3.5, 8.7); int i = max(100, 800); char ch = max('A', 'Q'); int i2 = max(600, 200); } Khi C++ phát hin câu lnh: float f = max(3.5, 8.7); nó s kim tra đ xác đnh xem hàm max(float, float) đã có mã lnh hay chưa và nó s t đng to ra mã lnh nu chưa có. Chú ý rng khi gp câu lnh int i2 = max(600, 200); thì nó s không to ra mã lnh cho hàm max(int,int) na vì nó đã to ra t trưc.

Chuyên bit hoá hàm Khi s dng hàm max đ so sánh hai string như sau: main() { char *namel = "Able"; char *name2 = "Baker"; cout << max(namel, name2) << '\n'; } Vì string đưc biu din bi mt con tr (char *), nên câu lnh if (dl > d2) s so sánh giá tr ca con tr ch không phi ni dng ca con tr. Mà ta mun C++ vn s dng cách so sánh vi nhng d liu thông thưng, riêng đi vi string thì phi s dng strcmp.

Chuyên bit hoá hàm … Thc hin quá trình chuyên bit hoá (specialization). Ta đnh nghĩa li hàm max ch dùng cho kiu string. char *max(char *dl, char *d2) { if (strcmp(dl, d2) < 0) return (dl); return (d2); } Khi C++ phát hin ra câu lnh cout << max(namel, name2) << '\n'; thì nó s tìm nhng hàm thông thưng có dng max(char *, char *), sau đó nó mi tìm đn template max(kind d1, kind d2).

2. Khuôn hình lp #include const int STACK_SIZE = 100; // s lưng phn t ln nht trong Stack template class stack { private: int count; // S lưng phn t ca Stack kind data[STACK_SIZE]; // Mng cha các phn t ca Stack public: stack (void) {count = 0; // Stack ban đu rng} void push(const kind item) { data[count] = item; ++count; } kind pop(void) { --count; return (data[count]); } };

Khuôn hình lp … Nu ta khai báo: stack a_stack; // câu lnh không hp l Stack là mt template chung. Khi C++ nhìn thy lnh khai báo này, nó s hi stack nào?. Phi xác đnh mt kiu d liu c th đưc lưu trong stack. Phi khai báo: stack a_stack; // Các phn t trong stack là kiu s nguyên Sau đó, ta có th s dng stack như sau: a_stack.push(l); x = a_stack.pop();

Khuôn hình lp … Đnh nghĩa các hàm thành phn bên ngoài đnh nghĩa lp như sau: template inline void stack ::push(const kind item) { data[count] = item; ++count; }

Chuyên bit hoá lp template stack {...} Gii thiu cho C++ bit cách to ra mt tp các lp có tên là stack, stack, stack,… C++ s t đng to ra các hàm thành viên như: stack : :push, stack : :push, và stack ::push. Nu khai báo mt hàm thành viên mt cách tưng minh thì C++ s s dng đnh nghĩa này trưc. inline void stack ::push(const char * item) { data[count] = strdup(item); ++count; } T khoá template nói cho C++ bit Đây là class chung, hãy to ra mt phiên bn tương ng vi nó. Nu không có t khoá template, C++ s hiu đây là hàm chính thc và phi s dng nó trưc.

Chương 8: Qun lý b nh

Ni dung chính Con tr (Pointer) Tham chiu (Reference) S dng tham chiu hay con tr

1. Con tr Con tr đưc s dng đ: Truy nhp vào các thành phn ca mng Truyn tham s cho hàm theo kiu truyn bin Truyn mng và xâu ký t cho hàm Ly thông tin t b nh ca h thng To ra nhng cu trúc d liu như: danh sách liên kt

Con tr … Mi bin trong chương trình chim mt vùng nh, ví d bin kiu int chim 4 byte nh. V trí ca vùng nh đưc gi là đa ch ca bin x1054 0x1055 0x1056 0x x x x1060 int i; Đa ch ca i char c; Đa ch ca c short s;Đa ch ca s

Bin con tr Bin con tr là bin lưu giá tr ca đa ch vùng nh. Mi kiu d liu có mt bin con tr riêng: con tr kiu int, con tr kiu char… C++ s dng: Toán t & đ ly đa ch ca bin Toán t * đ ly ni dung ca bin đưc tr. Ví d: int i=17; int* ptr; // khai báo bin tr kiu int ptr= &i; // gán đa ch ca bin i cho con tr ptr cout << *ptr << endl; // hin th ni dung ca bin i

Bin con tr … 17 0x1054 int i; int* ptr; ptr=&i; Đa ch cout << *ptr << endl; Ni dung

Bin con tr … int v; // khai báo bin v kiu int int w; // khai báo bin w kiu int int* p; // khai báo bin p kiu con tr tr ti kiu int p=&v; // gán đa ch ca v cho con tr p v=3; // gán giá tr 3 cho v *p=7; // gán giá tr 7 cho v p=&w; // gán đa ch ca w cho con tr p *p=12; // gán giá tr 12 cho w S dng toán t * đ ly ni dung ca bin còn đưc gi là tham chiu ngưc ti con tr.

Con tr hng Khai báo hng: const int result = 5;// result là hng result = 10; // sau đó gán li giá tr thì C++ s báo li Khai báo con tr hng: const char* answer_ptr = "Forty-Two"; // answer_ptr là con tr tr ti hng kiu char D liu đưc tr bi con tr hng thì không th thay đi nhưng con tr thì có th. answer_ptr = "Fifty-One"; // đúng (answer_ptr là bin con tr) *answer_ptr = 'X'; // sai (*answer_ptr là hng)

Con tr hng … Nu khai báo: char *const nameptr = "Test";//name_ptr là con tr hng nameptr = "New"; // sai (name_ptr là hng) *nameptr = 'B'; // đúng (*nameptr là char) Nu khai báo như sau thì không th thay đi đưc c con tr và ni dung ca con tr: const char* const titleptr = "Title";

Con tr là tham s ca hàm C++ cung cp 3 cách truyn tham s: Truyn tham tr: void f(int x); Truyn tham chiu: void f(int& x); Truyn con tr: void f(int* x);

Con tr là tham s ca hàm … void swap( double& x, double& y) { double tmp=x; x=y; y=tmp; } void swap( double* ptr1, double* ptr2) { double tmp=*ptr1; *ptr1=*ptr2; *ptr2=tmp; } double a=3.0; double b=5.0 swap(a,b); // gi tham chiu ca bin a và b swap(&a, &b); // s dng đa ch ca bin a và b

Con tr là tham s ca hàm… void bsort (double* ptr, int n) { int j,k; for (j=0; j<n-1; j++) for(k=j+1; k<n; k++) if(*(ptr+j) > *(ptr+k)) swap(ptr+j,ptr+k); } double array[6] = { 2.3, 4.5, 1.2, 6.8, 0.8, 4.9 }; bsort(array,n);

Qun lý b nh Toán t new đưc s dng đ to ra các đi tưng trên vùng nh heap. Date* CreateDate() { int day, month, year; char dummy; cout << Enter dd/mm/yyyy :; cin >> day >> dummy >> month >> dummy >> year; Date* tmpptr = new Date date(day, month, year); return tmpptr; } Date* ptr; ptr=CreateDate(); cout << You entered << *ptr << endl;

Qun lý b nh … Toán t new cũng đưc s dng đ cp phát các block nh. Toán t delete đưc s dng đ gii phóng vùng nh đưc cp phát bi toán t new. #include char* str =This is an old C-style string; int len=strlen(str); // xác đnh kích thưc ca str char* ptr; ptr = new char[len+1]; // cp phát vùng nh strcpy(ptr,str); cout << ptr= << ptr << endl; delete [] ptr; // gii phóng vùng nh

Toán t new đưc s dng trong hàm to class String { private: char* str; public: String(char* s) { int length=strlen(s); str = new char[length+1]; strcpy(str,s); } ~String() { delete [] str; } void Display() { cout << str << endl; } }; String mystring=This is my string of Type String; mystring.Display();

Con tr tr ti đi tưng Con tr tr ti các đi tưng cũng tương t như các kiu built-in khác. Truy nhp ti các thành phn thông qua toán t -> Date date; date.Set(12,3,1996); date.Display(); Date* dateptr; dateptr=new Date; dateptr->Set(9,12,1999); dateptr->Display(); (*dateptr).Display();

Ví d: Linked List struct link // đnh nghĩa mt phn t trong danh sách { int data; // data item link* next; // con tr tr ti phn t k tip }; class linklist { private: link* first; // con tr tr ti phn t đu tiên trong danh sách public: linklist() { first = NULL;} // hàm to không có tham s void additem(int d); // b sung thêm mt phn t vào danh sách void display(); // hin th danh sách } ;

Ví d: Linked List … void linklist::additem(int d) { link* newlink = new link; // to ra mt phn t mi trong danh sách newlink->data = d; // gán d liu newlink->next=first; // tr vào phn t đu tiên first = newlink; // thay đi con tr first } void linklist::display() { link* current=first; // bt đu t phn t đu tiên while(current != NULL) // đn khi kt thúc danh sách { cout data << ; current=current->next; // di chuyn đn phn t k tip }

Cu trúc t tr Mt lp có th cha con tr tr ti đi tưng ca chính lp đó, nhưng không th cha đi tưng ca lp đó. class someclass { someclass* ptr; // đúng }; class someclass { someclass obj; //sai };

Ví d: S dng cu trúc t tr class LinkList { private: int data; LinkList *next, *first; public: LinkList(); void Insert(int d); void Show(); };

Ví d: S dng cu trúc t tr … LinkList :: LinkList(){f=NULL;} void LinkList :: Insert(int d) { LinkList* n = new LinkList(); n->data=d; n->next=first; first=next; } void LinkList :: Show() { LinkList* p=first; while (p!=NULL) { cout data<<endl; p=p->next; }

2. Tham chiu Tham chiu là mt bí danh (alias) Khi ta to ra mt tham chiu, khi to nó bng tên ca mt đi tưng khác (đi tưng đích)thì tham chiu đóng vai trò là mt cái tên khác ca đích. Bt k vic gì đưc thc hin trên tham chiu cũng tc là đưc thc hin trên đích. Khai báo tham chiu: int& rSomeRef = someInt;

Tham chiu … Nu ta yêu cu mt tham chiu tham chiu ti đa ch ca nó, thì tham chiu s tr v đa ch ca đi tưng đích ca nó. Ví d: int intOne; int& rSomeRef = intOne; cout << "&intOne: " << &intOne << endl; cout << "&rSomeRef: " << &rSomeRef << endl;

Tham chiu ti đi tưng Bt k đi tưng nào cũng đưc tham chiu, k c các đi tưng do ngưi s dng đnh nghĩa. Tham chiu ti các đi tưng thưng đưc s dng như chính đi tưng đó. D liu thành phn và các phương thc đưc truy nhp bng cách s dng toán t., tham chiu đóng vai trò là bí danh ca đi tưng. Ví d: int& rIntRef = int; // sai int howBig = 200; int& rIntRef = howBig; Tương t, không th khi to mt tham chiu ti lp CAT: CAT& rCatRef = CAT; // sai Phi khi to rCatRef ti mt đi tưng CAT c th CAT frisky; CAT& rCatRef = frisky;

Con tr Null và tham chiu Null Khi con tr không đưc khi to hoc b xoá thì chúng đu đưc gán bng Null. Tuy nhiên, mt tham chiu không th là Null Mt chương trình có tham chiu ti mt đi tưng Null thì b coi là chương trình không hp l và không th kim soát đưc ht tt c các li trong chương trình.

3. S dng tham chiu hay con tr Ngưi lp trình C++ thích tham chiu hơn con tr. Tham chiu thưng rõ ràng, d s dng hơn và thc hin nhim v che du thông tin tt hơn. Không th gán li tham chiu. Nu ta cn tr ti mt đi tưng và sau đó li tr ti mt đi tưng khác, thì ta phi s dng con tr. Tham chiu không th null, cho nên nu có trưng hp đi tưng có th là null thì ta phi s dng con tr. Ví d: int* pInt = new int; if (pInt != NULL) int& rInt = *pInt;

S dng tham chiu hay con tr … Ta có th khai báo c con tr và tham chiu trong cùng mt danh sách các tham s ca hàm, cùng vi các đi tưng truyn tr khác. Ví d: CAT * SomeFunction (Person& theOwner, House* theHouse, int age); SomeFunction có 3 tham s: Tham s th nht là tham chiu ti đi tưng Person Tham s th hai là con tr ti đi tưng House Tham s th ba là mt s nguyên. Hàm tr v mt con tr tr ti đi tưng CAT. Trưc khi truyn tham chiu cho hàm hoc tr v mt tham chiu thì ta phi đt ra câu hi Tham chiu s là bí danh ca đi tưng nào và nó có tn ti mi khi tham chiu đưc s dng không?

Chương 9: Mng

Ni dung chính Đnh nghĩa mng Mng nhiu chiu Mng con tr Xâu ký t

1. Đnh nghĩa mng Mng (Array) Là mt tp các v trí nh liên tip nhau Các phn t trong mng có cùng tên và cùng kiu.

Khai báo mng type arrayName [ arraySize ]; int c[ 10 ]; // mng c gm 10 s nguyên float d[ 3284 ]; // mng d gm 3284 s thc Có th khai báo nhiu mng cùng kiu int b[ 100 ], x[ 27 ]; Truy nhp ti phn t trong mng Xác đnh thông qua tên mng và ch s: arrayname[ position number ] Phn t đu tiên v trí th 0

Khi to mng S dng vòng lp for: gán giá tr cho tng phn t trong mng. S dng danh sách khi to: int n[ 5 ] = { 1, 2, 3, 4, 5 }; Nu không đ giá tr khi to thì nhng phn t còn li s nhn giá tr mc đnh. Nu giá tr khi to nhiu hơn kích thưc mng thì s báo li. Gán tt c các phn t vi cùng mt giá tr int n[ 5 ] = { 0 }; Nu kích thưc mng không đưc khai báo thì danh sách khi to s xác đnh: int n[] = { 1, 2, 3, 4, 5 }; //Mng n có 5 phn t

Tham s mng Tham s mng đưc biu din bi kiu d liu và kích thưc ca mng void display(float [n][m]); Hàm có th không cn bit kích thưc ca mng nhưng phi bit kích thưc ca mt phn t trong mng void myFunction(int n[]); void display(float [][m]); Khi gi hàm, ta ch cn truyn tên mng int myArray[ 24 ]; myFunction( myArray); Mng đưc truyn theo kiu truyn tham chiu Hàm có th chnh sa d liu ca các phn t trong mng Tên mng là đa ch ca phn t đu tiên

Mng đi tưng Có th lưu tr đi tưng trong mng. Khi khai báo mng, cn cung cp: Kiu đi tưng đưc lưu tr S lưng đi tưng. Chương trình dch s tính ra kích thưc vùng nh cn đ cp phát cho mng.

Ví d: Mng đi tưng class CAT { public: CAT() { itsAge = 1; itsWeight=5; } ~CAT() {} int GetAge() const { return itsAge; } int GetWeight() const { return itsWeight; } void SetAge(int age) { itsAge = age; } private: int itsAge; int itsWeight; }; int main() { CAT Litter[5]; int i; for (i = 0; i < 5; i++) Litter[i].SetAge(2*i +1); for (i = 0; i < 5; i++) { cout << "Cat #" << i+1<< ": "; cout << Litter[i].GetAge() << endl; } return 0; }

2. Mng nhiu chiu Mng nhiu chiu đưc coi là mng ca mng. Khai báo: double sales[2][2]; sales[1][0]=2.5; Khi to: double sales[2][2]={{1.2,3.0},{-1.0,2.3}};

3. Mng con tr Ta có th đt toàn b mng lên vùng nh t do CAT *Family = new CAT[500]; Family là mt co tr tr ti phn t đu tiên ca mng có 500 phn t CAT Family tr ti hoc có đa ch ca phn t Family[0]. S dng con tr đ truy nhp vào tng phn t trong mng CAT *Family = new CAT[500]; CAT *pCat = Family; //pCat tr vào Family[0] pCat->SetAge(10); // gán Family[0] bng 10 pCat++; // tr vào Family[1] pCat->SetAge(20); // gán Family[1] bng 20

Phân bit con tr tr ti mng và mng các con tr Cat FamilyOne[500] CAT * FamilyTwo[500]; CAT * FamilyThree = new CAT[500]; FamilyOne là mt mng có 500 phn t CAT FamilyTwo là mt mng có 500 con tr tr ti CAT FamilyThree là mt con tr tr ti mt mng có 500 phn t CAT.

4. Xâu ký t Trong C++, xâu ký t là mt mng các phn t kiu char và kt thúc bng ký t null. Có hai cách khai báo: char Greeting[] = { `H', `e', `l', `l', `o', ` `, `W','o','r','l','d', `\0' }; char Greeting[] = "Hello World"; S dng cin.get() #include int main() { char buffer[80]; cout << "Enter the string: "; cin.get(buffer, 79); // get up to 79 or newline cout << "Here's the buffer: " << buffer << endl; return 0; }

Lp string string là mt lp chun trong C++ Các ký t trong string đưc đánh t 0 Khi to mt đi tưng string string s1 (Man); string s2=Beast; string s3; Ta có th s dng các tóan t tóan hc, logic … trên đi tưng string s3 = s1; s3 = Neither + s1 + nor; s3 += s2;

string và toán t >> Hàm getline(cin, string str): lưu thông tin t lung vào chun đưa vào str. Ví d: string full_name; cout<< Enter your fullname:; getline(cin, full_name); // full_name lưu thông tin mà ngưi s dng nhp t bàn phím

Tìm kim string s1=Hello world; string s2=world; int n=s1.find(s2); //n=6 find() tr v v trí ln đu tiên s2 xut hin trong s1. Nu không tìm thy tr v 0

Chnh sa erase(int i1, int i2): xóa xâu con có chiu dài i2 bt đu t v trí i1. s=Hello world; s.erase(1,4); //s=H world replace(int i1, int i2, string s2): thay th xâu con s2 t v trí i1, s lưng ký t thay th là i2. insert(int i, string s): chèn xâu s vào t v trí th i. append(int i, char c): chèn i ký t c vào cui xâu substr(int i1, int i2): tr v xâu con t i1, có kích thưc i2. size() và length(): tr v kích thưc ca xâu

Truy nhp đn ký t trong string S dng tóan t [] Hàm at(i): tr v v trí ca ký t th i trong xâu. Nu i>length() thì báo li Ví d: string s=Hello world; char c; c=s[1]; //c=e

Chương 10: Bt ngoi l

Ngoi l (Exception) Exception gm: Mô t li có th xy ra. Đon mã lnh trong đó xy ra exception, nm trong khi try{} Nhng th gây ra exception nm trong lnh throw Mã lnh bt li trong catch

Ví d Trong ví d v stack, li có th xy ra khi: Đy nhiu phn t vào stack Ly phn t ra khi stack rng Li có th xy ra là dng out-of-bound

Ví d … #include const int STACK_SIZE = 100; class stack { protected: int count; private: int data[STACK_SIZE]; public: stack(void); void push(const int item); int pop(void); };

Ví d … inline stack::stack(void) { count = 0; } inline void stack::push(const int item) { data[count] = item; count++; } inline int stack::pop(void) { count--; return (data[count]); }

Ví d … const int WHAT_MAX = 80; class bound_err { public: char what[WHAT_MAX]; bound_err(char *_what) { if (strlen(_what) < (WHAT_MAX -1)) strcpy(what, _what); else strcpy(what, "Internal error: _what is too long"); } };

Ví d … class b_stack: public stack { public: void push(const int item) throw(bound_err); int pop(void) throw(bound_err); };

Ví d … inline void b_stack::push(const int item) throw(bound_err) { if (count >= STACK_SIZE) { bound_err overflow("Push overflows stack"); throw overflow; } stack::push(item); } inline int b_stack::pop(void) throw(bound_err) { if (count <= 0) { throw bound_err("Pop causes stack underflow"); } return (stack::pop()); }

Ví d … b_stack test_stack; void push_a_lot(void) { for (int i = 0; i < 5000; i++) test_stack.push(i); } main () { try { push_a_lot(); } catch (bound_err &err) { cout << "Error: Bounds exceeded\n"; cout << "Reason: " << err.what << '\n'; exit (8); } catch (...) { cout << "Error: Unexpected exception occurred\n"; exit (8); } return (0); }

Chương 11: Stream và File

Ni dung chính C++ File I/O File nh phân Con tr File

1. C++ File I/O I/O trong đưc xây dng trên 3 class: istream, ostream và iostream. C++ coi các file là lung các byte (stream). Khi I/O vi các file trên đĩa, ta phi s dng các lp ifstream, ofstream, và fstream đưc đnh nghĩa trong. Chú ý: ifstream tha k t istream ofstream tha k t ostream fstream tha k t iostream

Input File Đ đc 100 s t file numbers.dat, phi khai báo bin có kiu input file. ifstream data_file; Xác đnh tên file cn đc, bng cách s dng hàm open. data_file.open("numbers.dat" ); Đc d liu t file ra: for (i = 0; i < 100; ++i) data_file >> data_array[i]; Sau khi s dng xong, đóng file li. data_file.close();

Input File … C++ cho phép gi open ngay trong hàm to: ifstream data_file("numbers.dat"); Khi m file s dng chng toán t ! đ kim tra file có đưc m thành công hay không Khi đc file, đ kim tra li s dng hàm bad. if (data_file.bad()) { cerr << "Unable to open numbers.dat\n"; exit (8); } Hàm getline cho phép đc c dòng d liu t file: istream &getline(char *buffer, int len, char delim = '\n') buffer Là b đm lưu d liu len là chiu dài ca b đm. Chú ý, ký t kt thúc không đưc lưu trong b đm.

Output file Các hàm dùng cho input file và output file tương t nhau. ofstream out_file("out.dat"); Đnh nghĩa đy đ: ofstream::ofstream(const char *name, int mode=ios::out, int prot = filebuf::openprot); name là tên file mode là ki m file ios: :app ghi vào cui file ios: :ate khi file đang m, nhy xung cui file ios::in m đ nhp vào(ch áp dng cho opens ca bin ifstream). ios: :out m đ hin th(ch áp dng cho opens ca bin ofstream). ios: :binary Binary file ios:: trunc Loi b ni dung ca file đang tn ti khi m file đ ghi. ios::nocreate Li nu file không tn ti.(Ch áp dng cho output file, input file luôn li nu không tn ti file). ios::noreplace Không ghi đè lên file đã tn ti. prot:Bo v file. Giá tr này ph thuc vào OS. UNIX 0644 Windows là 0.

Output File … Ví d: ofstream out_file("data.new",ios::out|ios::binary|ios::nocreate|ios::app); Ghi tip d liu nh phân vào file đã tn ti, có tên là data.new

2. File nh phân Vào ra nh phân đưc s dng vi 2 hàm thành viên: read và write. in_file.read(dataptr, size); out_file.write(data_ptr, size); data_ptr: con tr tr ti v trí đt d liu size: s lưng byte cn đc Hàm gcount: tr v s byte đưc ly ra t ln đc cui cùng. (có th nh hơn s byte yêu cu). Hàm eof: kim tra kt thúc file

Ví d struct { int width; int height; } rectangle; in_file.read((char *)(&rectangle), sizeof(rectangle)); if (infile.bad()) { cerr << "Unable to read rectangle\n"; exit (8); } if (in_file.gcount() != sizeof(rectangle)) { cerr << "Error: Unable to read full rectangle\n"; cerr << "I/O error of EOF encountered\n"; } D liu đưc đưa vào mt struct. Toán t & th hin là con tr kiu rectangle và đưc ép kiu thành con tr kiu char (char *). Toán t sizeof đưc s dng đ xác đnh bao nhiêu byte cn đc.

3. Con tr File Mi đi tưng file có hai giá tr nguyên là get pointer và put poiter - đ xác đnh v trí nào trong file cn đc hoc ghi. Hàm seekg() và tellg() cho phép thit lp và kim tra get pointer. Hàm seekp() và tellp() cho phép thit lp và kim tra put pointer.

Con tr File … seekg() có 1 tham s: xác đnh v trí bt đu file có 2 tham s Tham s th nht xác đnh v trí offset Tham s th hai xác đnh hưng dch chuyn beg: t đu file đn v tri offset cur: t v trí hin ti đn v trí offset end: t cui file ngưc đn offset infile.seekg(0,ios::end)//di chuyn t đu đn cui file

Con tr File … tellg(): tr v v trí hin ti ca get point

Ví d class person { protected: char name[80]; int age; public: void getdata() { cout >name; cout >age; } void showdata() { cout<<"\n Name:"<<name; cout<<"\n Age:"<<age; } };

Ví d … int main(int argc, char* argv[]) { person p; fstream outfile("Person.txt",ios::out|ios::in| ios::binary|ios::app); for(int i=0;i<3;i++) { p.getdata(); outfile.write((char*)(&p),sizeof(p)); } outfile.seekg(0); do { outfile.read((char*)(&p),sizeof(p)); p.showdata(); } while(! outfile.eof()); return 0; }