Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Kỹ thuật định nghĩa chồng overloading trong lập trình C++

  1. #1
    No Avatar
    hiepsithong Khách

    Post Kỹ thuật định nghĩa chồng overloading trong lập trình C++

    Mình đang học về C++ các bro có thể cho mình biết thế nào gọi là overloading và kỹ thuật lập trình overloading ra sao???

  2. #2
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Overloading có thể dịch là định nghĩa chồng hoặc là quá tải, mình chọn cách gọi định nghĩa chồng, nó thể hiển rõ ý nghĩa của overloading. Có 2 loại định nghĩa chồng là chồng hàm và chồng toán tử.

    Chồng hàm:
    Hàm được đặc trưng bởi: tên hàm, số tham số, kiểu tham số
    2 hàm khác nhau tên thì khác nhau
    2 hàm trùng tên, số tham số khác nhau thì khác nhau
    2 hàm trùng tên, cùng số tham số, kiểu tham số khác nhau thì khác nhau
    Cơ chế cho các hàm trùng tên nhưng thi hành phụ thuộc vào kiểu tham số gọi là chồng hàm.
    Ví dụ:
    int max(int a, int b);
    int max(in a, int b, int c);
    double max(double a, double b);

    Chồng toán tử:
    Toán tử thực chất là 1 hàm có dạng: <Kiểu> operator<Ký hiệu> (<các tham số>);
    Ví dụ: toán tử cộng 2 só nguyên: int operator+ (int a,int b);
    Về chồng toán tử, mình có 1 bài ứng dụng rất rõ ràng đó là lập trình thao tác trên phân số. Sau đây là code chương trỉnh, các bạn có thể tham khảo:
    Code:
    #include <iostream>
    using namespace std;
    struct frac {int tu,mau;};
    //khai bao cac ham su dung trong chuong trinh
    istream& operator>>(istream& cin,frac& ps){
        cout <<"\nNhap tu so: "; cin >>ps.tu;
        cout <<"Nhap mau so: "; cin >>ps.mau;
        return cin;
    }
    ostream& operator<<(ostream& cout,frac& ps){
        cout <<ps.tu <<" / " <<ps.mau;
        return cout;
    }
    int ucln(int m,int n){
        int sodu, tich = m*n;
        while (n != 0){sodu = m % n; m = n; n = sodu;}
        return m;
    }
    int bcnn(int m,int n){ return (m*n/ucln(m,n)); }
    frac nghichdao(frac a){
        int temp;
        temp = a.tu;
        a.tu = a.mau;
        a.mau = temp;
        return a;
    }
    frac toigian(frac a){
        int temp = ucln(a.tu,a.mau);
        a.tu /= temp;
        a.mau /= temp;
        return a;
    }
    void quydong(frac& a,frac& b){
        a = toigian(a); b = toigian(b); 
        a.tu *= (bcnn(a.mau,b.mau)/a.mau);
        b.tu *= (bcnn(a.mau,b.mau)/b.mau);
        a.mau = bcnn(a.mau,b.mau);
        b.mau = bcnn(a.mau,b.mau);
    }
    frac operator+(frac a,frac b){
        frac temp; quydong(a,b);
        temp.tu = a.tu + b.tu;
        temp.mau = a.mau;
        return toigian(temp);
    }
    frac operator-(frac a,frac b){
        frac temp; quydong(a,b);
        temp.tu = a.tu - b.tu;
        temp.mau = a.mau;
        return toigian(temp);
    }
    frac operator*(frac a,frac b){
        frac temp; 
        temp.tu = a.tu * b.tu;
        temp.mau = a.mau * b.mau;
        return toigian(temp);
    }
    frac operator/(frac a,frac b){ return (a * nghichdao(b)); }
    void choose(int c){
        switch (c){
            case 1:{ 
                 cout <<"Nhap phan so a: "; frac a; cin >>a;
                 cout <<"Nhap phan so b: "; frac b; cin >>b;
                 quydong(a,b);
                 cout <<"Hai phan so sau khi quy dong: " 
                      <<"\nPhan so a: " <<a 
                      <<"\nPhan so b: " <<b;
                 fflush(stdin); getchar(); break;
            }
            case 2:{
                 cout <<"Nhap phan so a: "; frac a; cin >>a;
                 a = nghichdao(a);
                 cout <<"Phan so a sau khi nghich dao: " <<a;
                 fflush(stdin); getchar(); break;
            }
            case 3:{
                 cout <<"Nhap phan so a: "; frac a; cin >>a;
                 a = toigian(a);
                 cout <<"Phan so a sau khi toi gian: " <<a;
                 fflush(stdin); getchar(); break;
            }
            case 4:{
                 cout <<"Nhap phan so a: "; frac a; cin >>a;
                 cout <<"Nhap phan so b: "; frac b; cin >>b;
                 frac c = a + b;
                 cout <<"Ket qua: " <<c;
                 fflush(stdin); getchar(); break;
            }
            case 5:{
                 cout <<"Nhap phan so a: "; frac a; cin >>a;
                 cout <<"Nhap phan so b: "; frac b; cin >>b;
                 frac c = a - b;
                 cout <<"Ket qua: " <<c;
                 fflush(stdin); getchar(); break;
            }
            case 6:{
                 cout <<"Nhap phan so a: "; frac a; cin >>a;
                 cout <<"Nhap phan so b: "; frac b; cin >>b;
                 frac c = a * b;
                 cout <<"Ket qua: " <<c;
                 fflush(stdin); getchar(); break;
            }
            case 7:{
                 cout <<"Nhap phan so a: "; frac a; cin >>a;
                 cout <<"Nhap phan so b: "; frac b; cin >>b;
                 frac c = a / b;
                 cout <<"Ket qua: " <<c;
                 fflush(stdin); getchar(); break;
            }
        } 
    }
    void menu(int& c){
        system("cls");
        cout <<"Chuong trinh tinh toan tren phan so:\n"
             <<"1: Quy dong mau so.\n"
             <<"2: Phan so nghich dao.\n"
             <<"3: Toi gian phan so.\n"
             <<"4: Tinh cong tren phan so.\n"
             <<"5: Tinh tru tren phan so.\n"
             <<"6: Tinh nhan tren phan so.\n"
             <<"7: Tinh chia tren phan so.\n"
             <<"0: Thoat.\n"
             <<"Chon cong viec: "; cin >>c;
    }
    //chuong trinh chinh
    int main(){
        int c;
        do {menu(c); choose(c);} while (c != 0);
        return 0;
    }

  3. #3
    No Avatar
    hiepsithong Khách

    Cám ơn bạn rất nhiều. Bạn cho mình hỏi thêm nữa là cách thức để đọc một file gồm 1 dãy các số nguyên ngăn cách với nhau bởi 1 ký tự đặc biệt vào trong 1 mảng các số nguyên???

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Khi đọc File, nếu các số nguyên ngăn cách nhau ít nhất 1 dấu cách là chúng ta cứ đọc tuần tự thôi.
    Ví dụ ta đã ghi vào file như sau:
    hàng đầu tiên ghi số nguyên n chỉ cấp của ma trận (ở đay lấy đơnn giản là ma trận vuông)
    Các hàng tiếp theo thì chúng ta ghi ma trận theo hàng cột
    Thế thì trước hết chúng ta đọc n
    Sau đó thực hiện 2 vòng for(i=1;i<=n;i++) và đọc từng phần tử vào mảng bình thường như bạn nhập vào vậy
    dùng fscan();

  5. #5
    No Avatar
    hiepsithong Khách

    cám ơn các bro rất nhiều.

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    6

    Mặc định Kỹ thuật định nghĩa chồng overloading trong lập trình C++

    cảm ơn bạn nhưng khi là một mảng các phân số thì mình làm sao hã bạn, mong bạn chỉ giúp mình đang gặp phải bài này nhưng nbo1 tay nè

  7. #7
    Ngày gia nhập
    10 2010
    Nơi ở
    tp Hcm
    Bài viết
    2

    Các anh cho em hỏi . Vd :
    Code:
    class ps
    {
    int t,m;
    friend class ps1;
    public:
               friend ps & operator +(ps a,ps b){//.....}
    };
    class ps1
    {
           // em muốn hỏi ở đây em có thê tư định nghĩa tiếp phép toán - * / đc ko . Em làm như sau:
    // ps operator *(ps a,ps b){return ps(a.tu*b.tu,a.mau*b.mau);}
    // Lúc biên dịch báo lổi [Error] `ps1::operator *(ps, ps)' must take either zero or one argument
    }
    Mấy anh giúp giùm em .
    Thân

Các đề tài tương tự

  1. Kỹ thuật C++ Giúp mình sửa lỗi của Operator Overloading trong C++
    Gửi bởi cuoilennaocacban trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 29-10-2011, 11:00 PM
  2. Nghệ Thuật Phối Màu Sắc trong Thiết Kế Và In Ấn
    Gửi bởi thanhhung2013 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 15-09-2011, 03:29 PM
  3. Một số vấn đề về overloading operator trong C++?
    Gửi bởi alkill trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 24-07-2011, 07:59 PM
  4. Hàm trùng tên , Overloading function trong dll thì khai báo như nào và sử dụng như nào
    Gửi bởi mfc trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 9
    Bài viết cuối: 20-01-2011, 04:40 PM
  5. Lỗi overloading trong Dev-C++
    Gửi bởi Hok_bik_zi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 20-01-2008, 04:24 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn