Hàm tải bội toán tử thân thiện (friend overloaded function)

Một phần của tài liệu CAO HOC TRA VINH K28 (Trang 31 - 34)

d) Cú pháp cách 2B: truyền địa chỉ theo tham chiếu (chỉ ở C++)

6.5. Hàm tải bội toán tử thân thiện (friend overloaded function)

- Hàm tải bội toán tử thân thiện nhằm mục đích làm cho các phép tốn tải bội trở nên quen thuộc hơn khi sử dụng chúng trong chương trình. Nghĩa là các phép toán này sẽ được sử dụng một cách tự nhiên như những phép tốn thơng thường.

- Hàm tải bội toán tử thân thiện khác hàm tải bội toán tử (thường) ở chỗ: o Về hình thức: Nó có thêm từ khóa friend phía trước

o Về cấu trúc hàm: Tham số truyền vào hàm ln có đủ số ngơi của

tốn tử. Nói cách khác là có 2 đối tượng là tham số của hàm

Ví dụ: So sánh giữa tốn tử tải bội thường với toán tử tải bội thân thiện

Toán tử tải bội thường Toán tử tải bội thân thiện

Khai báo

istream& operator >> (istream& din); FRAC operator +(FRAC a);

friend istream& operator >> (istream& din, FRAC &a); friend FRAC operator +(FRAC a, FRAC b);

Định nghĩa

istream& FRAC::operator >> (istream& din){ cout<<"tu so: "; din>>this->t;

do{cout<<"mau so: ";din>>this->m; }while(this->m==0);

return din; }

istream& operator >> (istream& din, FRAC &a){ cout<<"tu so: "; din>>a.t;

do{cout<<"mau so: ";din>>a.m; }while(a.m==0);

return din; }

FRAC FRAC::operator +(FRAC a){ FRAC c;

c.t= t*a.m + a.t*m; c.m= m*a.m; reduce(c);

return c; }

FRAC operator +(FRAC a, FRAC b){ FRAC c;

c.t= a.t*b.m + a.m*b.t; c.m= a.m*b.m; reduce(c); return c; } Sử dụng FRAC a, b, c; a.operator >>(cin); … s1 = a.operator + (b); …. FRAC a, b, c; cin>>a; … s1 = a + b; …. 7. LUYỆN TẬP

Xây dựng lớp các VECTOR trong mặt phẳng với các phép toán sau bằng hai cách dùng toán tử tải bội thường và toán tử tải bội thân thiện (mỗi cách làm một chương trình):

- Nhập vector

- Xuất vector

- Tính tổng hai vector

- Tính tích của một vector với một số thực

- Tính tích vơ hướng của 2 vector

Cách 1: Tải bội thường Cách 2: Tải bội thân thiện

#include <iostream> #include <iomanip> using namespace std; class VECTOR{ int x,y; public:

istream& operator >> (istream& din); //nhap vector ostream& operator << (ostream& dout); //xuat vector VECTOR operator + (VECTOR a); // cong 2 vector VECTOR operator * (float r);// nhan 1 so thuc voi 1 vector float operator * (VECTOR a); // nhan vo huong 2 vector

//CACH THU 2: DUNG CAC HAM THAN THIEN#include <iostream> #include <iostream> #include <iomanip> using namespace std; class VECTOR{ int x,y; public:

friend istream& operator >> (istream& din,VECTOR &a); friend ostream& operator << (ostream& dout,VECTOR a);

};

istream& VECTOR::operator >> (istream& din){ cout<<"x: "; din>>this->x;

cout<<"y: "; din>>this->y; return din;

}

ostream& VECTOR::operator << (ostream& dout){ dout<<"("<<this->x<<", "<<this->y<<")"; return dout;

}

VECTOR VECTOR::operator + (VECTOR a){ VECTOR c;

c.x= this->x + a.x; c.y= this->y + a.y; return c;

}

VECTOR VECTOR::operator * (float r){ VECTOR c;

c.x= r*this->x; c.y=r*this->y; return c;

}

float VECTOR::operator * (VECTOR a){ float c; c = this->x*a.x + this->y*a.y; return c; } int main(){ cout<<setiosflags(ios::showpoint)<<setprecision(3); VECTOR a, b, c; float k;

cout<<"Nhap vecto a:\n"; a.operator >>(cin); cout<<"Nhap vecto b:\n"; b.operator >>(cin); cout<<"Nhap so thuc k: "; cin>>k;

c = a.operator + (b);

a.operator <<(cout); cout<<"+"; b.operator <<(cout); cout<<"="; c.operator <<(cout); cout<<endl; c = a.operator *(k);

friend VECTOR operator * (float r,VECTOR a); friend float operator * (VECTOR a,VECTOR b); };

istream& operator >> (istream& din,VECTOR &a){ cout<<"x: "; din>>a.x;

cout<<"y: "; din>>a.y; return din;

}

ostream& operator << (ostream& dout,VECTOR a){ dout<<"("<<a.x<<", "<<a.y<<")"; return dout; }

VECTOR operator + (VECTOR a,VECTOR b){ VECTOR c;

c.x= a.x + b.x; c.y= a.y + b.y; return c;

}

VECTOR operator * (float r,VECTOR a){ VECTOR c;

c.x= r*a.x; c.y=r*a.y; return c;

}

float operator * (VECTOR a,VECTOR b){ float c; c = a.x*b.x + a.y*b.y; return c; } int main(){ cout<<setiosflags(ios::showpoint)<<setprecision(3); VECTOR a, b, c; float k;

cout<<"Nhap vecto a:\n"; cin>>a; cout<<"Nhap vecto b:\n"; cin>>b; cout<<"Nhap so thuc k: "; cin>>k; c = a+b;

cout<<a; cout<<"+";

cout<<b; cout<<"="; cout<<c; cout<<endl; c = k*a;

cout<<k; cout<<"*";

a.operator <<(cout); cout<<"="; c.operator <<(cout); cout<<endl; k = a.operator *(b);

a.operator <<(cout); cout<<"*";

b.operator <<(cout); cout<<"="; cout<<k; return 0; }

cout<<k; cout<<"*";

cout<<a; cout<<"="; cout<<c; cout<<endl; k = a*b;

cout<<a; cout<<"*";

cout<<b; cout<<"="; cout<<k; return 0; }

Một phần của tài liệu CAO HOC TRA VINH K28 (Trang 31 - 34)

Tải bản đầy đủ (DOC)

(40 trang)
w