Các phương thức toán tử

5 328 0
Tài liệu đã được kiểm tra trùng lặp
Các phương thức toán tử

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

Thông tin tài liệu

Các phương thức toán tử 8.1. Cách đặt tên Các phương thức toán tử được xây dựng như các phương thức thông thường, chỉ có khác cách đặt tên. Tên các phương thức toán tử (cũng giống như hàm toán tử) được tạo bằng cách ghép từ khoá operator với một phép toán, ví dụ: operator+ operator<< operator>> 8.2. Con trỏ this Cũng giống như phương thức thông thường, phương thức toán tử có đối đầu tiên (đối không tường minh) là con trỏ this. 8.3. Toán tử một toán hạng Các phương thức toán tử một toán hạng: Dùng ngay con trỏ this để biểu thị toán hạng duy nhất này, nên trong phương thức sẽ không có đối tường minh. Ví dụ phương thức toán tử - (đổi dấu) một đối tượng kiểu SP (số phức) có thể viết như sau: class SP { private: double a; // Phần thực double b; // Phần ảo public: SP operator-(); } ; SP SP:: operator-() { SP u ; u.a = - this->a ; u.b = - this->b ; return u; } Cách dùng: SP u, v; u = -v; 8.4. Toán tử hai toán hạng Các phương thức toán tử hai toán hạng: Con trỏ this ứng với toán hạng thứ nhất, nên trong phương thức chỉ cần dùng một đối tường minh để biểu thị toán hạng thứ hai. Ví dụ phương thức toán tử + (cộng) hai đối tượng kiểu SP (số phức) có thể viết như sau: class SP { private: double a; // Phần thực double b; // Phần ảo public: SP operator+(SP u2); } ; SP SP:: operator+(SP u2) { SP u ; u.a = this->a + u2.a ; u.b = this->b + u2.b ; return u; 141 142 } Cách dùng: SP p, p, r; r = p + q ; 8.5. Lớp DT (Đa thức) Chương trình sau sẽ định nghĩa lớp DT và đưa vào các phương thức, hàm: + Các thuộc tính: int n ; // bậc đa thức double *a ; // trỏ tới vùng nhớ chứa các hệ số đa thức + Các phương thức operator+, operator- dùng để đổi dấu các hệ số đa thức operator+ dùng để cộng 2 đa thức operator- dùng để trừ 2 đa thức operator* dùng để nhân 2 đa thức operator^ dùng để tính giá trị đa thức operator[] dùng để cho biết bậc và hệ số của đa thức + Các hàm bạn: operator<< dùng để in các hệ số đa thức operator>> dùng để nhập các hệ số đa thức + Hàm (tự do) double F(DT p, double x) dùng để tính p(x)-giá trị đa thức tại x + Nói thêm về phương thức chỉ số và hàm tự do F - Nếu p là đối tượng của lớp DT, thì hàm chỉ số cho biết: p[-1] = double(n) p[i] = a[i] , i=0, 1, ., n - Hàm tự do F sẽ dùng phương thức chỉ số để xác định n , các hệ số đa thức và dùng chúng để tính giá trị đa thức. + Trong chương trình sử dụng hàm new để cấp phát vùng nhớ chứa hệ số đa thức. + Nội dung chương trình gồm: - Nhập, in các đa thức p, q, r, s - Tính đa thức: f = -(p + q)*(r - s) - Nhập các số thực x1 và x2 - Tính f(x1) (bằng cách dùng phương thức operator^) - Tính f(x2) (bằng cách dùng hàm F) // Chương trình CT3_10.CPP #include <conio.h> #include <iostream.h> #include <math.h> class DT { private: int n; // Bac da thuc double *a; // Tro toi vung nho chua cac he so da thuc // a0, a1, . public: friend ostream& operator<< (ostream& os,const DT &d); friend istream& operator>> (istream& is,DT &d); DT operator-(); DT operator+(const DT &d2); DT operator-(DT d2); DT operator*(const DT &d2); double operator^(const double &x); // Tinh gia tri da thuc double operator[](int i) { 143 144 if(i<0) return double(n); else return a[i]; } } ; // Ham tinh gia tri da thuc double F(DT d,double x) { double s=0.0 , t=1.0; int n; n = int(d[-1]); for (int i=0; i<=n; ++i) { s += d[i]*t; t *= x; } return s; } ostream& operator<< (ostream& os,const DT &d) { os << " - Cac he so (tu ao): " ; for (int i=0 ; i<= d.n ; ++i) os << d.a[i] <<" " ; return os; } istream& operator>> (istream& is,DT &d) { cout << " - Bac da thuc: " ; cin >> d.n; d.a = new double[d.n+1]; cout << "Nhap cac he so da thuc:\n" ; for (int i=0 ; i<= d.n ; ++i) { cout << "He so bac " << i << " = " ; is >> d.a[i] ; } return is; } DT DT::operator-() { DT p; p.n = n; p.a = new double[n+1]; for (int i=0 ; i<=n ; ++i) p.a[i] = -a[i]; return p; } DT DT::operator+(const DT &d2) { DT d; int k,i; k = n > d2.n ? n : d2.n ; d.a = new double[k+1]; for (i=0; i<=k ; ++i) if (i<=n && i<=d2.n) d.a[i] = a[i] + d2.a[i]; 145 146 else if (i<=n) d.a[i] = a[i]; else d.a[i] = d2.a[i]; i=k; while(i>0 && d.a[i]==0.0) --i; d.n = i; return d ; } DT DT::operator-(DT d2) { return (*this + (-d2)); } DT DT::operator*(const DT &d2) { DT d; int k, i, j; k = d.n = n + d2.n ; d.a = new double[k+1]; for (i=0; i<=k; ++i) d.a[i] = 0; for (i=0 ; i<= n ; ++i) for (j=0 ; j<= d2.n ; ++j) d.a[i+j] += a[i]*d2.a[j] ; return d; } double DT::operator^(const double &x) { double s=0.0 , t=1.0; for (int i=0 ; i<= n ; ++i) { s += a[i]*t; t *= x; } return s; } void main() { DT p,q,r,s,f; double x1,x2,g1,g2; clrscr(); cout <<"\nNhap da thuc P " ; cin >> p; cout << "\nDa thuc p " << p ; cout <<"\nNhap da thuc Q " ; cin >> q; cout << "\nDa thuc q " << q ; cout <<"\nNhap da thuc R " ; cin >> r; cout << "\nDa thuc r " << r ; cout <<"\nNhap da thuc S " ; cin >> s; cout << "\nDa thuc s " << s ; f = -(p+q)*(r-s); cout << "\nNhap so thuc x1: " ; cin >> x1; cout << "\nNhap so thuc x2: " ; cin >> x2; g1 = f^x1; g2 = F(f,x2); cout << "\nDa thuc f " << f ; 147 148 cout << "\n f("<<x1<<") = " << g1; cout << "\n f("<<x2<<") = " << g2; getch(); } 149 147 148 . Các phương thức toán tử 8.1. Cách đặt tên Các phương thức toán tử được xây dựng như các phương thức thông thường, chỉ có khác cách đặt tên. Tên các phương. phương thức thông thường, phương thức toán tử có đối đầu tiên (đối không tường minh) là con trỏ this. 8.3. Toán tử một toán hạng Các phương thức toán tử

Ngày đăng: 25/10/2013, 02:20

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan