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

Tài liệu lập trình C tiếng Việt Lesson4

41 385 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 41
Dung lượng 333 KB

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

Nội dung

Giới thiệu Lớp Complex  a,b là 2 số phức  Xác định toán tử giống như việc xác định hàm gọi là hàm toán tử  Từ khóa operator và ký hiệu toán tử... Complex class – một số nhận xét a+b

Trang 1

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

Bài 4: Toán tử

Trang 3

Giới thiệu

 Lớp Complex

 a,b là 2 số phức

 Xác định toán tử giống như việc xác định hàm (gọi là hàm toán tử)

 Từ khóa operator và ký hiệu toán tử

Trang 4

Khai báo chồng toán tử

Function name Using

Trang 6

Complex class

void display(){

cout<<real<<(image>=0?’+’:’-’)<<fabs(image)<<“*i”<<endl;

}

// Function operator+ define binary plus operation

complex operator+ (complex b) {

Trang 8

Complex class – một số nhận xét

 a+b giống như a.operator+(b)

 operator+ là hàm thành viên public

 Gọi a.operator+(b): a là tham số ẩn còn b

là tham số tường minh

 Chương trình dịch không thể thực hiện:

3+a (3.operator+(a)) Để giải quyết vấn đề này, phải sử dụng hàm bạn bè

Trang 9

Hàm toán tử là hàm bạn bè

// the same as complex1.cpp

class complex{

//

// Free function operator+ defines binary operator +

friend complex operator+(float x, complex b);

};

complex operator+(float x, complex b){

cout<<“call operator+(float, complex)\n”;

complex c;

c.real=x+b.real;

c.image=b.image;

Trang 11

complex & operator-()

 complex operator+(float, complex&)

Trang 12

Khả năng và giới hạn của việc viết toán tử

 operator++() và operator () là toán tử tiền tố;

operator++(int) và operator (int) là toán tử hậu tố

 operator phải duy trì là 1 hay 2 ngôi

 Một trong số các toán hạng phải là đối tượng

Trang 13

Chiến lược sử dụng toán tử

 Các toán tử nên giữ ngữ nghĩa gốc

Trang 14

Thí dụ

 Phép gán operator“=“

 Giả sử a,b là 2 đối tượng vector

 Biểu thức: a=b;  a.operator=(b);

 Lưu ý:

Cần xác định toán tử gán cho các đối tượng

có dữ liệu thành viên động

Trang 15

Thí dụ

vector & vector::operator=(vector &b){

cout<<“Call operator=() for ”<<this<<endl;

Trang 16

float real, image;

friend ostream & operator<<(ostream &o, complex &b);

friend istream & operator>>(istream &i, complex &b);

Trang 17

Thí dụ

istream & operator>>(istream &i, complex &b){

cout<<“Real member:”; i>>b.real;

cout<<“Image member:”; i>>b.image;

Trang 19

Chuyển kiểu

 Chuyển dạng built-in sang lớp

Giả sử đối tượng “a” là một số phức

Trang 22

Số hữu tỷ

Có thể hợp nhất với các dạng số khác:

c = a + 3; // Should mean same as addition of 3/1

double x = 2.5 * a; // Should convert fraction to a

double

Trang 23

Các phép toán số học trên số phức

a/b + c/d được xác định là (a*d + c*d)/(b*d)

Fraction operator+(const Fraction& left, const Fraction&

Trang 24

Các phép toán số học một ngôi

+ - * & có cả 2 dạng một và hai ngôi

Để viết chồng các toán tử 1 ngôi, giảm số tham số

Trang 27

Stream Output <<

 Lớp Output stream cho phép viết 1 ký tự đơn

 Thư viện Stream cung cấp toán tử chèn cho tất cả các dạng built-in:

ostream& operator<<(ostream& out, double value);

 Lưu ý: chính stream lại được trả ra

Thí dụ: Overload output for Fraction

ostream& operator<<( ostream &out, const Fraction &value )

{

out << value.numerator() << "/" << value.denominator();

return out;

}

Trang 28

Stream Input >>

 Thư viện Stream cung cấp cho tất cả các dạng built-in

 Có thể viết chồng như toán tử output

 Tham số thứ 2 là tham chiếu không const

 Thí dụ: Input operator for Time

Trang 29

Stream Input >> (cont.)

Giả sử thời gian được cho vào bằng 3 tham số nguyên chỉ giờ, phút và giây Thí dụ 9 15 00 thể hiện 9:15:00 a.m

istream& operator>>(istream& in, Time& a)

{

int hours;

int minutes;

int seconds;

in >> hours >> minutes >> seconds;

a = Time(hours, minutes, seconds);

return in;

Trang 30

istream& operator>>(istream& in, Fraction& r)

Trang 31

Viết chồng các toán tử tăng và giảm

Trang 32

Viết chồng các toán tử tăng giảm

Thí dụ: Increments for Fraction

Lưu ý:

 Prefix trả ra tham chiếu

 Postfix làm nhiều việc

class Fraction

{

Fraction& operator++(); // Prefix form

Fraction operator++(int unused); // Postfix form

};

Trang 33

Viết chồng toán tử tăng giảm

Trang 35

Viết chồng các toán tử gán (+= *=, etc.)

 Không được cung cấp tự động

Trang 36

Viết chồng các toán tử chuyển kiểu

 Dùng phương thức thiết lập để thể hiện việc

chuyển kiểu tới 1 dạng người dùng xác định

Thí dụ: nếu lớp Fraction có phương thức thiết lập với 1 tham số nguyên thì:

Trang 37

Viết chồng các toán tử chuyển kiểu

Trang 38

Viết chồng các toán tử chuyển kiểu

Trang 39

Thí dụ

Chuyển kiểu Fraction về double:

Fraction::operator double() const

{

// Convert numerator to double, then do division

return static_cast<double>(top) / bottom;

Trang 40

Stream Loops và các toán tử chuyển

Trang 41

Viết chồng toán tử chỉ mục

 Thường được xác định ở các bộ chứa có thể lập chỉ mục (vector hoặc map)

 Đối số tường minh là chỉ mục (index )

 Kết quả là giá trị được lưu ở vị trí được

xác định

 Trả ra tham chiếu tới giá trị để có một

L-value

 Phải là hàm thành phần

Ngày đăng: 28/03/2016, 01:03

TỪ KHÓA LIÊN QUAN