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

Đề tài: Lớp điểm Trong C++. Làm sao quá tải toán tử xuất << ?

  1. #1
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    Mặc định Lớp điểm Trong C++. Làm sao quá tải toán tử xuất << ?

    VD trong lớp Điểm đơn thuần thế này.

    C++ Code:
    1. #include <iostream.h>
    2. #include <conio.h>
    3. #include <math.h>
    4. class diem
    5. {
    6.     private:
    7.     float x;
    8.       float y;
    9.      
    10.    public:
    11.     diem()
    12.       {
    13.         x=0;
    14.          y=0;
    15.       };
    16.       diem(float a,float b)
    17.       {
    18.         x=a;y=b;
    19.       };
    20.       void settung(float t);
    21.       float gettung();
    22.       void sethoanh(float h);
    23.       float gethoanh();
    24.       void setdiem(diem j);
    25.       float KC(diem k);
    26.       void show();
    27. };
    28.  
    29. void diem::settung(float t)
    30. {
    31.     x=t;
    32. };
    33.  
    34. float diem::gettung()
    35. {
    36.     return x;
    37. };
    38.  
    39. void diem::sethoanh(float h)
    40. {
    41.     y=h;
    42. };
    43.  
    44. float diem::gethoanh()
    45. {
    46.     return y;
    47. };
    48.  
    49. void diem::setdiem(diem j)
    50. {
    51.     x=j.x;
    52.    y=j.y;
    53. };
    54.  
    55. float diem::KC(diem k)
    56. {
    57.     return sqrt((x-k.x)*(x-k.x)+(y-k.y)*(y-k.y));
    58. };
    59.  
    60. void diem::show()
    61. {
    62.     cout<<"("<<x<<" ; "<<y<<")";
    63. };

    Mình muốn dùng quá tải (operator) để quá tải toán tử xuất << . Để có thể xuất thẳng một đối tượng ra mà không cần dùng hàm hiện thị nữa mà ko biết làm thế nào. Mọi người dúp nhá.

    Ôi chết mình gửi nhầm box ai đó move sang phần hỏi đáp dúp mình
    Đã được chỉnh sửa lần cuối bởi kidkid : 15-05-2007 lúc 10:16 PM.

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Chưa thử định nghĩa chồng toán tử kiểu này bao giờ nhưng có lẽ là được dù có khó khăn nhất định , iamvtn viết một hàm định nghĩa chồng ở ngoài sau đó khai báo trong lớp là friend .... như thế là được rồi ?

  3. #3
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Bài này chắc cũng lâu rùi, chắc lúc này iamvtn cũng mới học nhỉ T_T! Mình sữa lại cho 1 số bạn mới học xem vậy :
    Pass stream cout vào cũng được :
    PHP Code:
    void Show(ostream &oss) const;
    {
        
    oss << "(" << << "  " << << ")";

    Ví dụ gọi hàm thì :
    PHP Code:
    diem Obj;
    Obj.Show(cout); 
    Hoặc dùng friend quá tải stream <<
    PHP Code:
    ostream &operator <<(ostream &ossdiem const &c)
    {
        
    oss << "(" << << " ; " << << ")"
        return 
    oss;


  4. #4
    Ngày gia nhập
    10 2007
    Bài viết
    8

    đối với xuất đối tượng trong c++ thì tốt nhất và chuẩn nhất là dùng toán tử operator dùng như sau !

    Code:
     
    xuất :
    friend ostream & operator << (ostream &OutDev,LDiem ) 
    
    nhập :
    friend istream &operator >>(istream &InDev,LDiem & )
    Tình Này Mãi Chao Về Em ......http://forums.congdongcviet.com/signaturepics/sigpic16224_1.gif

  5. #5
    Ngày gia nhập
    09 2007
    Bài viết
    1

    Theo mình thì để định nghĩa toán tử << hay >> thì dùng như sau

    istream& operator>>(istream&);
    ostrema& operator<<(ostream&);

  6. #6
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Mặc định Lớp điểm Trong C++. Làm sao quá tải toán tử xuất << ?

    ostream &operator <<(ostream &oss, diem const &c)
    {
    oss << "(" << x << " ; " << y << ")";
    return oss;
    }
    Anh RR giải thích cho em tại sao phải truyền theo kiểu tham chiếu ko ? Dùng kiểu tham trị truyền có được ko ?

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

    Cú pháp nó là như vậy, đây là cú pháp mặc định mà.

  8. #8
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Em thì đoán là do ta đã return ra oss tức là trả về tham chiếu của đối tượng cout nên bắt buộc cái oss mà ta truyền vào cũng phải theo kiểu tham chiếu để có thể "bắt chính xác" đối tượng cout . Ko biết đúng sai ???

    ostream &operator <<(ostream &oss, diem const &c)
    {
    oss << "(" << x << " ; " << y << ")";
    return oss;
    }

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Toán tử << là shift left, trong C++ thì toán tử này đã được overload lại rồi, đọc về lớp istream và ostream sẽ hiểu.
    ostream cơ bản cũng là 1 lớp, vậy oss là đối tượng, chẳng có gì mặc định là tham chiếu cả, dùng con trỏ vẫn được. Tuy nhiên phần I/O của C++ không đơn giản, mới học đọc vào thì freak-out là cái chắc. Tham trị thì chắc chắn là không được, vì nếu tạo bản sao của đối tượng thì làm sao chỉnh sửa được nó???
    Xài kiểu friend quá tải kiếu đó rất dễ error prone ví dụ ta thêm vào chi tiếp của thư viện I/0 manipulator ( #include <iomanip> )
    std::cout << std::left << anObject << setw(8) << bOject;
    sẽ thấy ngay ra kết quả sai. Thao tác của show dù gì cũng an toàn hơn. Nếu xài friend thì phải dùng viết theo kiểu template thao tác trực tiếp trên đối tượng ostream luôn ( phần này thì không dễ, cứ từ từ học sẽ hiểu ). Nếu cần ví dụ anh sẽ đưa.

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

  1. Lập trình C++ Mình muốn hỏi về bài toán tìm số lần xuất hiện của ký tự nhiều nhất trong chuỗi và số lần xuất hiện
    Gửi bởi ducky trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 06-09-2013, 11:17 AM
  2. Lập trình C Xuất nhập file trong C kết quả xuất ra không đúng?
    Gửi bởi lamhoang100 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: 05-06-2013, 05:38 PM
  3. Đếm các xâu thuận nghịch xuất hiện trong file và số lần xuất hiện của các xâu đó
    Gửi bởi orchidshl1 trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 1
    Bài viết cuối: 19-09-2012, 10:47 AM
  4. Trả lời: 1
    Bài viết cuối: 27-04-2011, 09:30 PM
  5. bài toán tìm số lần xuất hiện các phần tử xuất hiện trong 1 chuỗi
    Gửi bởi tuan_anhhhh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 11-03-2008, 09:30 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