Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 8 của 8
  1. #1
    Trích dẫn Gửi bởi hnhuy
    void operator=(const frac &q);// dinh nghia toan tu =

    thế này sẽ ok
    bạn ơi phiền bạn chút nữa là vì sao void operator=(const frac &q); thì lại được mà

    void operator=(frac &q) thì lại không được.

    từ const ở đây có vai trò gì vậy ? thank bạn

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    vì sao phép chồng toán tử + và = sau lại không đúng

    Mã:
    #include<stdio.h>
    #include<conio.h>
    #include<iostream.h>
    class frac
    {
          private:
                  float a;// tu so
                  float b; // mau so
          public:
                 frac();// ham thiet lap khong tham so
                 void add();// ham nhap mot phan so
                 void dislay();// ham in mot phan so
                 frac operator+(frac &q);// cong hai phan so
                 void operator=(frac &q);// dinh nghia toan tu =
    };
    frac::frac()
    {
               a=0;
               b=0;
    };
    void frac::add()
    {
         cout<<"tu so a=";
         cin>>a;
         cout<<"mau so b=";
         cin>>b;
    };
    void frac::dislay()
    {
         cout<<" phan so la "<<a<<"/"<<b;
    };
    
    void frac::operator=(frac &q)
    {
         a=q.a;
         b=q.b;
    };
    frac frac::operator+(frac &q)
    {
         frac k;
         k.a= (a*q.b)+(b*q.a);
         k.b=(b*q.b);
         return k;     
    };
    int main()
    {
      
        frac q,p,k;
        q.add();
        p.add();
        k=q+p;          
        k.dislay();
        system("pause");
    }
    tại sao khi chạy đoạn mã trên thì báo lỗi là

    no match for 'operator=' in 'k = (&q)->frac:perator+(((frac&)(&p)))'

    rõ ràng là mình đã định nghĩa toán tử = và toán tử + rồi cơ mà.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    mình đã test và chạy bình thường [IMG]images/smilies/dont_know.gif[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi hnhuy
    mình đã test và chạy bình thường [IMG]images/smilies/dont_know.gif[/IMG]
    bạn test trên IDE nào vậy , mình test trên DEV C++ nó báo lỗi như vậy.

    Không biết lỗi do đâu nhỉ ?

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thêm
    void operator=(frac const&q);// dinh nghia toan tu =
    hoặc xóa hẳn cái toán tử gán luôn đi.

    thật ra chính xác phải như vầy:

    Mã:
    frac operator+(frac const&q)const;frac& operator=(frac const&q);//chỉ viết khi cần deep copy

  6. #6
    Trích dẫn Gửi bởi ngonchanloi89
    bạn test trên IDE nào vậy , mình test trên DEV C++ nó báo lỗi như vậy.

    Không biết lỗi do đâu nhỉ ?
    void operator=(const frac &q);// dinh nghia toan tu =

    thế này sẽ ok

  7. #7
    Trích dẫn Gửi bởi ngonchanloi89
    bạn ơi phiền bạn chút nữa là vì sao void operator=(const frac &q); thì lại được mà

    void operator=(frac &q) thì lại không được.

    từ const ở đây có vai trò gì vậy ? thank bạn
    theo chuẩn tham số của nó luôn là const TênLớp&, mình test trên visua thì những lệnh của bạn chạy bình thường, nhưng trên dev thị lại lỗi, có lẽ sự khó tính của trình biên dịch(mình chém gió đó[IMG]images/smilies/2.gif[/IMG]), mình nghĩ const đảm bảo sự an toàn của đối tượng truyền vào.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi ngonchanloi89
    bạn ơi phiền bạn chút nữa là vì sao void operator=(const frac &q); thì lại được mà

    void operator=(frac &q) thì lại không được.

    từ const ở đây có vai trò gì vậy ? thank bạn
    Từ khóa const để đảm bảo rằng tham số truyền vào không thay đổi

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •