Toán tử hai toán hạng

Một phần của tài liệu Chương 3C++ và lập trình hướng đối tượngTrong chương này trình bầy các potx (Trang 53 - 61)

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; } 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:

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) { if(i<0) return double(n); else return a[i]; } } ;

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) (adsbygoogle = window.adsbygoogle || []).push({});

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]; else if (i<=n)

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 ; cout << "\n f("<<x1<<") = " << g1; cout << "\n f("<<x2<<") = " << g2; getch();

Một phần của tài liệu Chương 3C++ và lập trình hướng đối tượngTrong chương này trình bầy các potx (Trang 53 - 61)