SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
Bài 10: Chồng hàm và toán tử
(Function and operator overload)
1 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Chồng hàm
 C++ cho phép nhiều hàm trong cùng một phạm vi (toàn cục, trong
cùng namespace, hàm static trong một file nguồn,...) có thể có trùng
tên, nhưng phải khác nhau về các tham số gọi (số tham số, kiểu
từng tham số)
1. int compare(int n1, int n2);
2. int compare(float x1, float x2);
3. bool compare(float x1, float x2); // lỗi
4. int compare(string& s1, string& s2);
5. int compare(const string& s1, const string& s2);
 Để xác định đúng hàm gọi, trình biên dịch sẽ ưu tiên hàm có các
kiểu tham số chính xác như các tham số khi gọi, nếu không có thì sẽ
dùng hàm nào mà các tham số có thể chuyển kiểu được sang
string ss1("xyz"), ss2("mpnq");
const string cs("aaa");
compare(1.3, 2.5); // lỗi
compare("abcd", "12345"); // hàm 5
compare(ss1, ss2); // hàm 4
compare(ss1, cs); // hàm 5
2 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Chồng phương thức trong lớp
 Tương tự, các phương thức trong cùng một lớp cũng có thể được
định nghĩa chồng
 class C {
public:
int compare(int x, int y);
int compare(int x, int y) const;
int compare(float x, float y);
};
 Định nghĩa chồng ở lớp con sẽ che mất các phương thức cùng tên
của lớp mẹ
 class D: public C {
public:
int compare(string s1, string s2);
};
D d;
d.compare("1234", "abcd"); // OK
d.compare(10, 20); // lỗi
d.C::compare(10, 20); // OK
3 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Tham số mặc định của hàm/phương thức
 Các tham số của hàm có thể có giá trị mặc định (là giá trị được dùng
nếu bỏ qua khi gọi)
 Tham số mặc định phải là các tham số cuối cùng của hàm
 void out(double x, int width = 7, int prec = 3) {...}
out(1.2345, 10, 5);
out(1.2345, 10); //  out(1.2345, 10, 3);
out(1.2345); //  out(1.2345, 7, 3);
 void f(char c = 'y', int n, bool b = true) {...} // lỗi
 Tham số mặc định có thể chỉ cần khai báo ở prototype
 double df(double x, int order = 1);
// ...
double df(double x, int order) {...}
 Có thể dùng biểu thức làm giá trị mặc định, nhưng không được chứa
các tham số khác của hàm đó
 UserProfile usr;
double out(double x, int prec = getPrecOption(usr));
 double next(double x, double dx = diff(x)); // lỗi
4 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Tham số mặc định của hàm/phương thức (tiếp)
 Tránh gây nhầm lẫn với các hàm chồng
 void input(double& x);
void input(double& x, const char* prompt = "Nhap so: ");
input(y); // lỗi
 Tham số mặc định của phương thức: tương tự như hàm
 class Vehicle {
void out(int prec = 3);
};
 Tham số mặc định của constructor
 class Vehicle {
public:
Vehicle(); // cons mặc định
Vehicle(Color c = Color::black, int wheels = 4);
};
Vehicle v1(Color::red);
Vehicle v2(Color::white, 8);
Vehicle v3; // lỗi
 Hàm/phương thức có số tham số tuỳ ý: tự tìm hiểu thêm
5 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Định nghĩa chồng toán tử
(operator overload)
6 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Khái niệm
 Các toán tử trong C++ có thể được định nghĩa lại cho các kiểu mới:
 VD: sau khi đã định nghĩa lớp Vector, ta có thể định nghĩa các
toán tử +, -, * để có thể thực hiện các phép toán như sau:
 Vector v1, v2, v3;
v3 = -v1 + v2*2; // câu lệnh sử dụng 4 toán tử
 Tuy nhiên, phép toán giữa các kiểu cơ bản là có sẵn, không thể
định nghĩa lại:
 int x = 3 + 2*5;
double y = 2.54/1.23 + 3.11;
 Để định nghĩa lại toán tử, ta viết một hàm gọi là hàm toán tử
(operator function) với các tham số và kiểu trả về tương ứng
 Hàm toán tử có thể là hàm toàn cục hoặc là phương thức của một lớp
 Không được định nghĩa tham số mặc định cho các hàm toán tử
 Nếu được định nghĩa trong lớp, tham số thứ nhất của toán tử luôn là chính
đối tượng được gọi, không cần phải khai báo
7 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Khái niệm (tiếp)
 Hầu hết các toán tử có thể được định nghĩa lại trong C++:
 Các toán tử + - * & có ý nghĩa khác nhau khi dùng một hoặc hai ngôi,
nhưng đều có thể được định nghĩa lại
 Tất cả các toán tử trên khi định nghĩa trong một lớp, thì sẽ được thừa kế, chỉ
trừ toán tử =
 Chỉ một số ít toán tử không thể định nghĩa lại:
. .* :: ?: sizeof
 Không thể thay đổi thứ tự ưu tiên của các toán tử và thứ tự thực
hiện chúng trong biểu thức
8 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
+ - * / % ^ & | ~ !
= < > += -= *= /= %= ^= &=
|= << >> <<= >>= == != <= >= &&
|| ++ -- , ->* -> () [] new delete
new[] delete[] sizeof
Chồng toán tử một ngôi
 Dùng hàm toán tử toàn cục với một tham số, hoặc phương thức
không có tham số trong một lớp
 Cú pháp:
 <kiểu trả về> operator <toán tử>(<kiểu> <tham số>) {...}
hoặc:
 class <tên lớp> {
<kiểu trả về> operator <toán tử>() [const] {...}
};
 Ví dụ:
 Vector operator -(const Vector& v)
{ return Vector(-v.x, -v.y, -v.z); }
hoặc:
 class Vector {
public:
Vector operator -() const
// tham số chính là *this
{ return Vector(-x, -y, -z); }
};
9 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Chồng toán tử một ngôi (tiếp)
 Các hàm toán tử nếu khai báo ngoài lớp thường được khai báo là
friend để sử dụng các biến ẩn
 class Vector {
public:
friend Vector operator -(const Vector& v);
};
Vector operator -(const Vector& v)
{ return Vector(-v.x, -v.y, -v.z); }
 Ví dụ sử dụng:
 Vector v1(1.2, 2.3), v2;
v2 = -v1;
 Có thể gọi tường minh các hàm toán tử:
 v2 = operator –(v1); // hàm toán tử ngoài lớp
hoặc:
 v2 = v1.operator –(); // hàm toán tử trong lớp
10 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Toán tử ++ và --
 Hai toán tử này có thể dùng ở trước (tiền tố) hoặc sau (hậu tố). Để
phân biệt, toán tử tiền tố được định nghĩa như bình thường, còn
toán tử hậu tố có thêm tham số thứ hai với kiểu int (dù không dùng).
 Ví dụ định nghĩa trong lớp:
 class LimitedNum {
private:
int n, lim;
public:
LimitedNum& operator ++() { // tiền tố
if (++n > lim) n = lim;
return *this; }
LimitedNum& operator ++(int) { // hậu tố
return ++(*this); }
};
 Gọi hàm toán tử trực tiếp:
 n.operator ++(); // gọi toán tử tiền tố
n.operator ++(0); // gọi toán tử hậu tố
 Ghi chú: tương tự nếu hàm toán tử định nghĩa ngoài lớp
11 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Toán tử chuyển kiểu
 Tương tự như các toán tử một ngôi khác, nhưng không cần khai báo
kiểu trả về khi viết hàm toán tử (chỉ định nghĩa ở trong lớp)
 class Fraction {
private:
int a, b;
public:
operator double() { return (double)a/(double)b; }
operator string() { ... }
operator const char*() { ... }
...
};
 Sử dụng:
 Fraction f(4, 5);
double d = (double)f + 1.2;
string s(f);
strcpy(cstr, f);
 Chú ý phân biệt toán tử chuyển kiểu (chuyển tử lớp  kiểu khác) và
constructor chuyển kiểu (chuyển từ kiểu khác  lớp)
12 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Chồng toán tử hai ngôi
 Dùng hàm toán tử toàn cục với hai tham số, hoặc phương thức có một tham
số trong một lớp
 Ví dụ:
 Vector operator -(const Vector& v1, const Vector& v2)
{ return Vector(v1.x-v2.x, v1.y-v2.y, v1.z-v2.z); }
hoặc:
 class Vector {
public:
Vector operator -(const Vector& v) const
// tham số thứ nhất là *this
{ return Vector(x-v.x, y-v.y, z-v.z); }
};
 Ví dụ sử dụng:
 v3 = v2-v1;
 Tương tự với toán tử một ngôi:
 Thường khai báo các hàm toán tử hai ngôi ngoài lớp là friend để sử dụng biến ẩn
 Có thể gọi tường minh các hàm toán tử hai ngôi
13 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Toán tử so sánh
 Ví dụ:
 class Vector {
public:
bool operator ==(const Vector& v) const // trong lớp
{ return x == v.x && y == v.y; }
friend bool operator !=(const Vector&, const Vector&);
};
 // ngoài lớp:
bool operator !=(const Vector& v1, const Vector& v2)
{ return !(v1==v2); } // dùng lại toán tử ==
 Các toán tử so sánh khác có thể định nghĩa tương tự:
> < >= <=
14 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Các toán tử gán
 Các toán tử gán chỉ có thể được định nghĩa trong lớp
 class Complex {
public:
Complex& operator =(const Complex& c);
Complex& operator =(double x);
Complex& operator +=(const Complex& c);
Complex& operator -=(const Complex& c);
Complex& operator *=(double x);
};
 Các toán tử gán khác có thể định nghĩa tương tự:
= += -= *= /= ^= &= |= <<= >>=
15 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Toán tử =
 Có một số điểm khác các toán tử gán khác:
 Còn được coi là toán tử copy
 Nếu không khai báo, có một toán tử copy mặc định được định
nghĩa cho lớp với tham số cùng kiểu để copy các biến thành phần
 Không được thừa kế bởi các lớp dẫn xuất (bị toán tử mặc định
của lớp con che mất)
 Chú ý phân biệt với constructor copy
 Vector v2(v1), v3 = v2; // đều dùng constructor copy
 v3 = v2; // toán tử copy
 Phân biệt với constructor chuyển kiểu
 string s1("12"), s2 = "ab"; // các cons chuyển kiểu
 s2 = "xyz"; // toán tử copy
16 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Toán tử new, new[] và delete, delete[]
 Dùng để cấp phát bộ nhớ động
 Chú ý: việc gọi constructor, destructor là tự động, không thể can
thiệp
 class Obj {
public:
void* operator new(size_t sz) {
return malloc(sz);
}
void* operator new[](size_t sz) {
return malloc(sz);
}
void operator delete(void* p) {
free(p);
}
void operator delete[](void* p) {
free(p);
}
};
17 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Các toán tử đặc biệt khác tự tìm hiểu thêm
 Toán tử gọi hàm: p(x, y)
 Toán tử chỉ số: arr[i]
 Toán tử phảy: a, b
 Toán tử tham chiếu: *ptr
 Toán tử lấy phần tử: pnt->mem
 Toán tử con trỏ tới thành phần (pointer to a
member): obj->*mem
 Toán tử new có địa chỉ (placement new): new
(p)[n]
18 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
cout, cin và toán tử xuất/nhập
 cout, cin là hai đối tượng thuộc các lớp ostream và istream. Các toán
tử << và >> đã được định nghĩa chồng dùng để xuất/nhập.
 Ví dụ: ()
 ostream& operator <<(int x) {...}
ostream& operator <<(float x) {...}
ostream& operator <<(double x) {...}
ostream& operator <<(char x) {...}
ostream& operator <<(const char* s) {...}
...
istream& operator >>(int& x) {...}
istream& operator >>(float& x) {...}
istream& operator >>(double& x) {...}
istream& operator >>(char& x) {...}
istream& operator >>(char* s) {...}
...
19 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
 Ví dụ ở đây chỉ mang tính chất minh hoạ. Trên thực tế các lớp ostream và istream được định nghĩa không hoàn toàn
giống như ở đây. Xem thêm ở phần về STL.
Chồng toán tử << và >> để xuất/nhập
 Muốn các lớp mới tạo ra có thể dùng được với cout, cin thì định
nghĩa chồng các toán tử này cho lớp đó
 class Vector {
// khai báo friend cho các toán tử
};
ostream& operator <<(ostream& s, const Vector& v) {
s << '(' << v.x << ", " << v.y << ", " << v.z << ')';
return s;
}
istream& operator >>(istream& s, Vector& v) {
s >> v.x >> v.y >> v.z;
return s;
}
 Sử dụng:
 Vector v1, v2;
cout << "v1 = " << v1;
cin >> v2;
20 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
Bài tập
1. Định nghĩa đầy đủ các toán tử cho lớp Vector: cộng, trừ, nhân với số, tích
vô hướng và có hướng
2. Định nghĩa các toán tử cho lớp Complex
3. Định nghĩa các toán tử cho lớp String: + (cộng chuỗi hoặc ký tự), chuyển
kiểu, xuất/nhập, [ ] (lấy phần tử)
4. Viết một lớp BigInt để làm việc với các số lớn tuỳ ý và định nghĩa các toán
tử cần thiết: +, -, *, /, ++, --, chuyển kiểu sang string/long long
5. Viết một lớp Array cho mảng động với các toán tử: += (thêm phần tử, nối
hai mảng), [ ], chuyển kiểu
6. Viết một lớp Iterator để duyệt DSLK với toán tử ++ (tới phần tử tiếp theo),
! (kiểm tra đã ở cuối danh sách chưa), * (lấy giá trị tại vị trí hiện tại). Sau
đó định nghĩa toán tử ~ (tạo đối tượng Iterator) với lớp LList. Mục tiêu là
sau đó ta có thể duyệt DSLK như sau:
LList lst;
for (Iterator itr = ~lst; !itr; itr++) {
int& data = *itr;
// ...
}
21 EE3490: Kỹ thuật lập trình – HK1 2013/2014
TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội

Weitere ähnliche Inhalte

Ähnlich wie 10. C - Function And Operator Overload

Ähnlich wie 10. C - Function And Operator Overload (20)

Ltc 6
Ltc 6Ltc 6
Ltc 6
 
Chuong 5
Chuong 5Chuong 5
Chuong 5
 
Chuong3 c
Chuong3 c Chuong3 c
Chuong3 c
 
Chuong8 (2)
Chuong8 (2)Chuong8 (2)
Chuong8 (2)
 
Bai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethuaBai06 mot sokythuattrongkethua
Bai06 mot sokythuattrongkethua
 
Tut6 solution
Tut6 solutionTut6 solution
Tut6 solution
 
bai giang Matlab
bai giang Matlabbai giang Matlab
bai giang Matlab
 
Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
Bai giangtrenlop
Bai giangtrenlopBai giangtrenlop
Bai giangtrenlop
 
Pointer
PointerPointer
Pointer
 
Chuong1 c
Chuong1 c Chuong1 c
Chuong1 c
 
Chuong4 (2)
Chuong4 (2)Chuong4 (2)
Chuong4 (2)
 
Chuong 08 tai dinh nghia
Chuong 08 tai dinh nghiaChuong 08 tai dinh nghia
Chuong 08 tai dinh nghia
 
New microsoft power point presentation
New microsoft power point presentationNew microsoft power point presentation
New microsoft power point presentation
 
Fortran cơ sở
Fortran cơ sởFortran cơ sở
Fortran cơ sở
 
Chuong 1
Chuong 1Chuong 1
Chuong 1
 
Hàm can bản
Hàm can bảnHàm can bản
Hàm can bản
 
Oop 2
Oop 2Oop 2
Oop 2
 
C3 functions and_library
C3 functions and_libraryC3 functions and_library
C3 functions and_library
 
C3 functions and_library
C3 functions and_libraryC3 functions and_library
C3 functions and_library
 

Mehr von Darian Pruitt

5 Paragraph Essay Svenska. Online assignment writing service.
5 Paragraph Essay Svenska. Online assignment writing service.5 Paragraph Essay Svenska. Online assignment writing service.
5 Paragraph Essay Svenska. Online assignment writing service.Darian Pruitt
 
13 Original Colonies Essay. Online assignment writing service.
13 Original Colonies Essay. Online assignment writing service.13 Original Colonies Essay. Online assignment writing service.
13 Original Colonies Essay. Online assignment writing service.Darian Pruitt
 
2Pac Changes Essay. Online assignment writing service.
2Pac Changes Essay. Online assignment writing service.2Pac Changes Essay. Online assignment writing service.
2Pac Changes Essay. Online assignment writing service.Darian Pruitt
 
4 Year Old Observation Essays. Online assignment writing service.
4 Year Old Observation Essays. Online assignment writing service.4 Year Old Observation Essays. Online assignment writing service.
4 Year Old Observation Essays. Online assignment writing service.Darian Pruitt
 
10 Lines Essay On Mahatma Gandhi In English
10 Lines Essay On Mahatma Gandhi In English10 Lines Essay On Mahatma Gandhi In English
10 Lines Essay On Mahatma Gandhi In EnglishDarian Pruitt
 
13 Reasons Why Literary Essay. Online assignment writing service.
13 Reasons Why Literary Essay. Online assignment writing service.13 Reasons Why Literary Essay. Online assignment writing service.
13 Reasons Why Literary Essay. Online assignment writing service.Darian Pruitt
 
50 Essays A Portable Anthology Pdf. Online assignment writing service.
50 Essays A Portable Anthology Pdf. Online assignment writing service.50 Essays A Portable Anthology Pdf. Online assignment writing service.
50 Essays A Portable Anthology Pdf. Online assignment writing service.Darian Pruitt
 
500-700 Word Essay Example. Online assignment writing service.
500-700 Word Essay Example. Online assignment writing service.500-700 Word Essay Example. Online assignment writing service.
500-700 Word Essay Example. Online assignment writing service.Darian Pruitt
 
9Th Grade Essay Format. Online assignment writing service.
9Th Grade Essay Format. Online assignment writing service.9Th Grade Essay Format. Online assignment writing service.
9Th Grade Essay Format. Online assignment writing service.Darian Pruitt
 
3.5 Essay. Online assignment writing service.
3.5 Essay. Online assignment writing service.3.5 Essay. Online assignment writing service.
3.5 Essay. Online assignment writing service.Darian Pruitt
 
15 Page Essay Example. Online assignment writing service.
15 Page Essay Example. Online assignment writing service.15 Page Essay Example. Online assignment writing service.
15 Page Essay Example. Online assignment writing service.Darian Pruitt
 
400 Words Essay On Security Threats In India
400 Words Essay On Security Threats In India400 Words Essay On Security Threats In India
400 Words Essay On Security Threats In IndiaDarian Pruitt
 
23 March 1940 Essay In English. Online assignment writing service.
23 March 1940 Essay In English. Online assignment writing service.23 March 1940 Essay In English. Online assignment writing service.
23 March 1940 Essay In English. Online assignment writing service.Darian Pruitt
 
5 Paragraph Essay Outline Mla Format. Online assignment writing service.
5 Paragraph Essay Outline Mla Format. Online assignment writing service.5 Paragraph Essay Outline Mla Format. Online assignment writing service.
5 Paragraph Essay Outline Mla Format. Online assignment writing service.Darian Pruitt
 
60 All Free Essays. Online assignment writing service.
60 All Free Essays. Online assignment writing service.60 All Free Essays. Online assignment writing service.
60 All Free Essays. Online assignment writing service.Darian Pruitt
 
25 Word Essay. Online assignment writing service.
25 Word Essay. Online assignment writing service.25 Word Essay. Online assignment writing service.
25 Word Essay. Online assignment writing service.Darian Pruitt
 
How To Write Paper Presentation. Online assignment writing service.
How To Write Paper Presentation. Online assignment writing service.How To Write Paper Presentation. Online assignment writing service.
How To Write Paper Presentation. Online assignment writing service.Darian Pruitt
 
History Essay - Writing Portfolio. Online assignment writing service.
History Essay - Writing Portfolio. Online assignment writing service.History Essay - Writing Portfolio. Online assignment writing service.
History Essay - Writing Portfolio. Online assignment writing service.Darian Pruitt
 
How Long Should A Introduction Paragraph Be.
How Long Should A Introduction Paragraph Be.How Long Should A Introduction Paragraph Be.
How Long Should A Introduction Paragraph Be.Darian Pruitt
 
Research Paper Writing Service. Online assignment writing service.
Research Paper Writing Service. Online assignment writing service.Research Paper Writing Service. Online assignment writing service.
Research Paper Writing Service. Online assignment writing service.Darian Pruitt
 

Mehr von Darian Pruitt (20)

5 Paragraph Essay Svenska. Online assignment writing service.
5 Paragraph Essay Svenska. Online assignment writing service.5 Paragraph Essay Svenska. Online assignment writing service.
5 Paragraph Essay Svenska. Online assignment writing service.
 
13 Original Colonies Essay. Online assignment writing service.
13 Original Colonies Essay. Online assignment writing service.13 Original Colonies Essay. Online assignment writing service.
13 Original Colonies Essay. Online assignment writing service.
 
2Pac Changes Essay. Online assignment writing service.
2Pac Changes Essay. Online assignment writing service.2Pac Changes Essay. Online assignment writing service.
2Pac Changes Essay. Online assignment writing service.
 
4 Year Old Observation Essays. Online assignment writing service.
4 Year Old Observation Essays. Online assignment writing service.4 Year Old Observation Essays. Online assignment writing service.
4 Year Old Observation Essays. Online assignment writing service.
 
10 Lines Essay On Mahatma Gandhi In English
10 Lines Essay On Mahatma Gandhi In English10 Lines Essay On Mahatma Gandhi In English
10 Lines Essay On Mahatma Gandhi In English
 
13 Reasons Why Literary Essay. Online assignment writing service.
13 Reasons Why Literary Essay. Online assignment writing service.13 Reasons Why Literary Essay. Online assignment writing service.
13 Reasons Why Literary Essay. Online assignment writing service.
 
50 Essays A Portable Anthology Pdf. Online assignment writing service.
50 Essays A Portable Anthology Pdf. Online assignment writing service.50 Essays A Portable Anthology Pdf. Online assignment writing service.
50 Essays A Portable Anthology Pdf. Online assignment writing service.
 
500-700 Word Essay Example. Online assignment writing service.
500-700 Word Essay Example. Online assignment writing service.500-700 Word Essay Example. Online assignment writing service.
500-700 Word Essay Example. Online assignment writing service.
 
9Th Grade Essay Format. Online assignment writing service.
9Th Grade Essay Format. Online assignment writing service.9Th Grade Essay Format. Online assignment writing service.
9Th Grade Essay Format. Online assignment writing service.
 
3.5 Essay. Online assignment writing service.
3.5 Essay. Online assignment writing service.3.5 Essay. Online assignment writing service.
3.5 Essay. Online assignment writing service.
 
15 Page Essay Example. Online assignment writing service.
15 Page Essay Example. Online assignment writing service.15 Page Essay Example. Online assignment writing service.
15 Page Essay Example. Online assignment writing service.
 
400 Words Essay On Security Threats In India
400 Words Essay On Security Threats In India400 Words Essay On Security Threats In India
400 Words Essay On Security Threats In India
 
23 March 1940 Essay In English. Online assignment writing service.
23 March 1940 Essay In English. Online assignment writing service.23 March 1940 Essay In English. Online assignment writing service.
23 March 1940 Essay In English. Online assignment writing service.
 
5 Paragraph Essay Outline Mla Format. Online assignment writing service.
5 Paragraph Essay Outline Mla Format. Online assignment writing service.5 Paragraph Essay Outline Mla Format. Online assignment writing service.
5 Paragraph Essay Outline Mla Format. Online assignment writing service.
 
60 All Free Essays. Online assignment writing service.
60 All Free Essays. Online assignment writing service.60 All Free Essays. Online assignment writing service.
60 All Free Essays. Online assignment writing service.
 
25 Word Essay. Online assignment writing service.
25 Word Essay. Online assignment writing service.25 Word Essay. Online assignment writing service.
25 Word Essay. Online assignment writing service.
 
How To Write Paper Presentation. Online assignment writing service.
How To Write Paper Presentation. Online assignment writing service.How To Write Paper Presentation. Online assignment writing service.
How To Write Paper Presentation. Online assignment writing service.
 
History Essay - Writing Portfolio. Online assignment writing service.
History Essay - Writing Portfolio. Online assignment writing service.History Essay - Writing Portfolio. Online assignment writing service.
History Essay - Writing Portfolio. Online assignment writing service.
 
How Long Should A Introduction Paragraph Be.
How Long Should A Introduction Paragraph Be.How Long Should A Introduction Paragraph Be.
How Long Should A Introduction Paragraph Be.
 
Research Paper Writing Service. Online assignment writing service.
Research Paper Writing Service. Online assignment writing service.Research Paper Writing Service. Online assignment writing service.
Research Paper Writing Service. Online assignment writing service.
 

Kürzlich hochgeladen

Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líDr K-OGN
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Nguyen Thanh Tu Collection
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdftohoanggiabao81
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfVyTng986513
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Nguyen Thanh Tu Collection
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdfTrnHoa46
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhvanhathvc
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxnhungdt08102004
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdfNQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdfNguyễn Đăng Quang
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...hoangtuansinh1
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................TrnHoa46
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIĐiện Lạnh Bách Khoa Hà Nội
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxendkay31
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 

Kürzlich hochgeladen (20)

1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
1 - MÃ LỖI SỬA CHỮA BOARD MẠCH BẾP TỪ.pdf
 
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh líKiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
Kiểm tra chạy trạm lí thuyết giữa kì giải phẫu sinh lí
 
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
Sáng kiến “Sử dụng ứng dụng Quizizz nhằm nâng cao chất lượng ôn thi tốt nghiệ...
 
Sơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdfSơ đồ tư duy môn sinh học bậc THPT.pdf
Sơ đồ tư duy môn sinh học bậc THPT.pdf
 
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdfchuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
chuong-7-van-de-gia-dinh-trong-thoi-ky-qua-do-len-cnxh.pdf
 
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
Sáng kiến Dạy học theo định hướng STEM một số chủ đề phần “vật sống”, Khoa họ...
 
sách sinh học đại cương - Textbook.pdf
sách sinh học đại cương   -   Textbook.pdfsách sinh học đại cương   -   Textbook.pdf
sách sinh học đại cương - Textbook.pdf
 
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhhôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
ôn tập lịch sử hhhhhhhhhhhhhhhhhhhhhhhhhh
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docxTrích dẫn trắc nghiệm tư tưởng HCM5.docx
Trích dẫn trắc nghiệm tư tưởng HCM5.docx
 
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
TỔNG HỢP ĐỀ THI CHÍNH THỨC KỲ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN NĂM ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdfNQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
NQA Lợi ích Từ ISO và ESG Tăng Trưởng và Bền Vững ver01.pdf
 
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
Thong bao 337-DHPY (24.4.2024) thi sat hach Ngoai ngu dap ung Chuan dau ra do...
 
Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................Đề cương môn giải phẫu......................
Đề cương môn giải phẫu......................
 
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘIGIÁO TRÌNH  KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
GIÁO TRÌNH KHỐI NGUỒN CÁC LOẠI - ĐIỆN LẠNH BÁCH KHOA HÀ NỘI
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptxChàm - Bệnh án (da liễu - bvdlct ctump) .pptx
Chàm - Bệnh án (da liễu - bvdlct ctump) .pptx
 
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
BỘ ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 

10. C - Function And Operator Overload

  • 1. Bài 10: Chồng hàm và toán tử (Function and operator overload) 1 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 2. Chồng hàm  C++ cho phép nhiều hàm trong cùng một phạm vi (toàn cục, trong cùng namespace, hàm static trong một file nguồn,...) có thể có trùng tên, nhưng phải khác nhau về các tham số gọi (số tham số, kiểu từng tham số) 1. int compare(int n1, int n2); 2. int compare(float x1, float x2); 3. bool compare(float x1, float x2); // lỗi 4. int compare(string& s1, string& s2); 5. int compare(const string& s1, const string& s2);  Để xác định đúng hàm gọi, trình biên dịch sẽ ưu tiên hàm có các kiểu tham số chính xác như các tham số khi gọi, nếu không có thì sẽ dùng hàm nào mà các tham số có thể chuyển kiểu được sang string ss1("xyz"), ss2("mpnq"); const string cs("aaa"); compare(1.3, 2.5); // lỗi compare("abcd", "12345"); // hàm 5 compare(ss1, ss2); // hàm 4 compare(ss1, cs); // hàm 5 2 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 3. Chồng phương thức trong lớp  Tương tự, các phương thức trong cùng một lớp cũng có thể được định nghĩa chồng  class C { public: int compare(int x, int y); int compare(int x, int y) const; int compare(float x, float y); };  Định nghĩa chồng ở lớp con sẽ che mất các phương thức cùng tên của lớp mẹ  class D: public C { public: int compare(string s1, string s2); }; D d; d.compare("1234", "abcd"); // OK d.compare(10, 20); // lỗi d.C::compare(10, 20); // OK 3 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 4. Tham số mặc định của hàm/phương thức  Các tham số của hàm có thể có giá trị mặc định (là giá trị được dùng nếu bỏ qua khi gọi)  Tham số mặc định phải là các tham số cuối cùng của hàm  void out(double x, int width = 7, int prec = 3) {...} out(1.2345, 10, 5); out(1.2345, 10); //  out(1.2345, 10, 3); out(1.2345); //  out(1.2345, 7, 3);  void f(char c = 'y', int n, bool b = true) {...} // lỗi  Tham số mặc định có thể chỉ cần khai báo ở prototype  double df(double x, int order = 1); // ... double df(double x, int order) {...}  Có thể dùng biểu thức làm giá trị mặc định, nhưng không được chứa các tham số khác của hàm đó  UserProfile usr; double out(double x, int prec = getPrecOption(usr));  double next(double x, double dx = diff(x)); // lỗi 4 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 5. Tham số mặc định của hàm/phương thức (tiếp)  Tránh gây nhầm lẫn với các hàm chồng  void input(double& x); void input(double& x, const char* prompt = "Nhap so: "); input(y); // lỗi  Tham số mặc định của phương thức: tương tự như hàm  class Vehicle { void out(int prec = 3); };  Tham số mặc định của constructor  class Vehicle { public: Vehicle(); // cons mặc định Vehicle(Color c = Color::black, int wheels = 4); }; Vehicle v1(Color::red); Vehicle v2(Color::white, 8); Vehicle v3; // lỗi  Hàm/phương thức có số tham số tuỳ ý: tự tìm hiểu thêm 5 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 6. Định nghĩa chồng toán tử (operator overload) 6 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 7. Khái niệm  Các toán tử trong C++ có thể được định nghĩa lại cho các kiểu mới:  VD: sau khi đã định nghĩa lớp Vector, ta có thể định nghĩa các toán tử +, -, * để có thể thực hiện các phép toán như sau:  Vector v1, v2, v3; v3 = -v1 + v2*2; // câu lệnh sử dụng 4 toán tử  Tuy nhiên, phép toán giữa các kiểu cơ bản là có sẵn, không thể định nghĩa lại:  int x = 3 + 2*5; double y = 2.54/1.23 + 3.11;  Để định nghĩa lại toán tử, ta viết một hàm gọi là hàm toán tử (operator function) với các tham số và kiểu trả về tương ứng  Hàm toán tử có thể là hàm toàn cục hoặc là phương thức của một lớp  Không được định nghĩa tham số mặc định cho các hàm toán tử  Nếu được định nghĩa trong lớp, tham số thứ nhất của toán tử luôn là chính đối tượng được gọi, không cần phải khai báo 7 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 8. Khái niệm (tiếp)  Hầu hết các toán tử có thể được định nghĩa lại trong C++:  Các toán tử + - * & có ý nghĩa khác nhau khi dùng một hoặc hai ngôi, nhưng đều có thể được định nghĩa lại  Tất cả các toán tử trên khi định nghĩa trong một lớp, thì sẽ được thừa kế, chỉ trừ toán tử =  Chỉ một số ít toán tử không thể định nghĩa lại: . .* :: ?: sizeof  Không thể thay đổi thứ tự ưu tiên của các toán tử và thứ tự thực hiện chúng trong biểu thức 8 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> <<= >>= == != <= >= && || ++ -- , ->* -> () [] new delete new[] delete[] sizeof
  • 9. Chồng toán tử một ngôi  Dùng hàm toán tử toàn cục với một tham số, hoặc phương thức không có tham số trong một lớp  Cú pháp:  <kiểu trả về> operator <toán tử>(<kiểu> <tham số>) {...} hoặc:  class <tên lớp> { <kiểu trả về> operator <toán tử>() [const] {...} };  Ví dụ:  Vector operator -(const Vector& v) { return Vector(-v.x, -v.y, -v.z); } hoặc:  class Vector { public: Vector operator -() const // tham số chính là *this { return Vector(-x, -y, -z); } }; 9 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 10. Chồng toán tử một ngôi (tiếp)  Các hàm toán tử nếu khai báo ngoài lớp thường được khai báo là friend để sử dụng các biến ẩn  class Vector { public: friend Vector operator -(const Vector& v); }; Vector operator -(const Vector& v) { return Vector(-v.x, -v.y, -v.z); }  Ví dụ sử dụng:  Vector v1(1.2, 2.3), v2; v2 = -v1;  Có thể gọi tường minh các hàm toán tử:  v2 = operator –(v1); // hàm toán tử ngoài lớp hoặc:  v2 = v1.operator –(); // hàm toán tử trong lớp 10 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 11. Toán tử ++ và --  Hai toán tử này có thể dùng ở trước (tiền tố) hoặc sau (hậu tố). Để phân biệt, toán tử tiền tố được định nghĩa như bình thường, còn toán tử hậu tố có thêm tham số thứ hai với kiểu int (dù không dùng).  Ví dụ định nghĩa trong lớp:  class LimitedNum { private: int n, lim; public: LimitedNum& operator ++() { // tiền tố if (++n > lim) n = lim; return *this; } LimitedNum& operator ++(int) { // hậu tố return ++(*this); } };  Gọi hàm toán tử trực tiếp:  n.operator ++(); // gọi toán tử tiền tố n.operator ++(0); // gọi toán tử hậu tố  Ghi chú: tương tự nếu hàm toán tử định nghĩa ngoài lớp 11 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 12. Toán tử chuyển kiểu  Tương tự như các toán tử một ngôi khác, nhưng không cần khai báo kiểu trả về khi viết hàm toán tử (chỉ định nghĩa ở trong lớp)  class Fraction { private: int a, b; public: operator double() { return (double)a/(double)b; } operator string() { ... } operator const char*() { ... } ... };  Sử dụng:  Fraction f(4, 5); double d = (double)f + 1.2; string s(f); strcpy(cstr, f);  Chú ý phân biệt toán tử chuyển kiểu (chuyển tử lớp  kiểu khác) và constructor chuyển kiểu (chuyển từ kiểu khác  lớp) 12 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 13. Chồng toán tử hai ngôi  Dùng hàm toán tử toàn cục với hai tham số, hoặc phương thức có một tham số trong một lớp  Ví dụ:  Vector operator -(const Vector& v1, const Vector& v2) { return Vector(v1.x-v2.x, v1.y-v2.y, v1.z-v2.z); } hoặc:  class Vector { public: Vector operator -(const Vector& v) const // tham số thứ nhất là *this { return Vector(x-v.x, y-v.y, z-v.z); } };  Ví dụ sử dụng:  v3 = v2-v1;  Tương tự với toán tử một ngôi:  Thường khai báo các hàm toán tử hai ngôi ngoài lớp là friend để sử dụng biến ẩn  Có thể gọi tường minh các hàm toán tử hai ngôi 13 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 14. Toán tử so sánh  Ví dụ:  class Vector { public: bool operator ==(const Vector& v) const // trong lớp { return x == v.x && y == v.y; } friend bool operator !=(const Vector&, const Vector&); };  // ngoài lớp: bool operator !=(const Vector& v1, const Vector& v2) { return !(v1==v2); } // dùng lại toán tử ==  Các toán tử so sánh khác có thể định nghĩa tương tự: > < >= <= 14 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 15. Các toán tử gán  Các toán tử gán chỉ có thể được định nghĩa trong lớp  class Complex { public: Complex& operator =(const Complex& c); Complex& operator =(double x); Complex& operator +=(const Complex& c); Complex& operator -=(const Complex& c); Complex& operator *=(double x); };  Các toán tử gán khác có thể định nghĩa tương tự: = += -= *= /= ^= &= |= <<= >>= 15 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 16. Toán tử =  Có một số điểm khác các toán tử gán khác:  Còn được coi là toán tử copy  Nếu không khai báo, có một toán tử copy mặc định được định nghĩa cho lớp với tham số cùng kiểu để copy các biến thành phần  Không được thừa kế bởi các lớp dẫn xuất (bị toán tử mặc định của lớp con che mất)  Chú ý phân biệt với constructor copy  Vector v2(v1), v3 = v2; // đều dùng constructor copy  v3 = v2; // toán tử copy  Phân biệt với constructor chuyển kiểu  string s1("12"), s2 = "ab"; // các cons chuyển kiểu  s2 = "xyz"; // toán tử copy 16 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 17. Toán tử new, new[] và delete, delete[]  Dùng để cấp phát bộ nhớ động  Chú ý: việc gọi constructor, destructor là tự động, không thể can thiệp  class Obj { public: void* operator new(size_t sz) { return malloc(sz); } void* operator new[](size_t sz) { return malloc(sz); } void operator delete(void* p) { free(p); } void operator delete[](void* p) { free(p); } }; 17 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 18. Các toán tử đặc biệt khác tự tìm hiểu thêm  Toán tử gọi hàm: p(x, y)  Toán tử chỉ số: arr[i]  Toán tử phảy: a, b  Toán tử tham chiếu: *ptr  Toán tử lấy phần tử: pnt->mem  Toán tử con trỏ tới thành phần (pointer to a member): obj->*mem  Toán tử new có địa chỉ (placement new): new (p)[n] 18 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 19. cout, cin và toán tử xuất/nhập  cout, cin là hai đối tượng thuộc các lớp ostream và istream. Các toán tử << và >> đã được định nghĩa chồng dùng để xuất/nhập.  Ví dụ: ()  ostream& operator <<(int x) {...} ostream& operator <<(float x) {...} ostream& operator <<(double x) {...} ostream& operator <<(char x) {...} ostream& operator <<(const char* s) {...} ... istream& operator >>(int& x) {...} istream& operator >>(float& x) {...} istream& operator >>(double& x) {...} istream& operator >>(char& x) {...} istream& operator >>(char* s) {...} ... 19 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội  Ví dụ ở đây chỉ mang tính chất minh hoạ. Trên thực tế các lớp ostream và istream được định nghĩa không hoàn toàn giống như ở đây. Xem thêm ở phần về STL.
  • 20. Chồng toán tử << và >> để xuất/nhập  Muốn các lớp mới tạo ra có thể dùng được với cout, cin thì định nghĩa chồng các toán tử này cho lớp đó  class Vector { // khai báo friend cho các toán tử }; ostream& operator <<(ostream& s, const Vector& v) { s << '(' << v.x << ", " << v.y << ", " << v.z << ')'; return s; } istream& operator >>(istream& s, Vector& v) { s >> v.x >> v.y >> v.z; return s; }  Sử dụng:  Vector v1, v2; cout << "v1 = " << v1; cin >> v2; 20 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  • 21. Bài tập 1. Định nghĩa đầy đủ các toán tử cho lớp Vector: cộng, trừ, nhân với số, tích vô hướng và có hướng 2. Định nghĩa các toán tử cho lớp Complex 3. Định nghĩa các toán tử cho lớp String: + (cộng chuỗi hoặc ký tự), chuyển kiểu, xuất/nhập, [ ] (lấy phần tử) 4. Viết một lớp BigInt để làm việc với các số lớn tuỳ ý và định nghĩa các toán tử cần thiết: +, -, *, /, ++, --, chuyển kiểu sang string/long long 5. Viết một lớp Array cho mảng động với các toán tử: += (thêm phần tử, nối hai mảng), [ ], chuyển kiểu 6. Viết một lớp Iterator để duyệt DSLK với toán tử ++ (tới phần tử tiếp theo), ! (kiểm tra đã ở cuối danh sách chưa), * (lấy giá trị tại vị trí hiện tại). Sau đó định nghĩa toán tử ~ (tạo đối tượng Iterator) với lớp LList. Mục tiêu là sau đó ta có thể duyệt DSLK như sau: LList lst; for (Iterator itr = ~lst; !itr; itr++) { int& data = *itr; // ... } 21 EE3490: Kỹ thuật lập trình – HK1 2013/2014 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội