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

Đề tài: [ Solved ]Hàm bạn

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

    Mặc định [ Solved ]Hàm bạn

    ai có thể giúp đệ hiểu thêm về cách định nghĩa hàm bạn trong public, nếu có code kèm theo để đệ hiểu thì càng tốt

  2. #2
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Về lý thuyết bạn nên đọc quyển C++ lập trình hướng đối tượng của thầy Phạm Văn Ất, ebook này hình như cũng có bạn tìm trong phần ebook.

    Một ví dụ, hàm bạn dùng trong nạp chồng toán tử.

    C++ Code:
    1. /*  CAC PHEP TOAN CO BAN VOI SO PHUC
    2.  
    3. - Voi 2 so phuc X1=a1 + b1*i;
    4.                 X2=a2 + b2*i;
    5.         Z=X1 +- X2=(a1 +- a2) + (b1 +- b2)*i;
    6.         Z=X1 * X2= (a1*a2 - b1*b2) + (a2*b1 - a1*b2)*i;
    7.         Z=X1 / X2= (a1*a2 + b1*b2)/(a2*a2 + b2*b2) + i*(a2*b1 - a1*b2)/(a2*a2 + b2*b2)
    8. */
    9. #include <iostream>
    10. #include <conio.h>
    11. using namespace std;
    12.  
    13.  
    14. class VIRTUAL_NUMBER
    15. {
    16.     private:
    17.         float a,b;
    18.     public:
    19.         friend ostream& operator<< (ostream& os,const VIRTUAL_NUMBER &c);
    20.         friend istream& operator>> (istream& is,VIRTUAL_NUMBER &c);
    21.         friend VIRTUAL_NUMBER operator- (const VIRTUAL_NUMBER c)
    22.         {
    23.             VIRTUAL_NUMBER d;
    24.             d.a=-c.a;
    25.             d.b=-c.b;
    26.             return d;
    27.         }
    28.         friend VIRTUAL_NUMBER operator+ (VIRTUAL_NUMBER c,VIRTUAL_NUMBER d);
    29.         friend VIRTUAL_NUMBER operator- (VIRTUAL_NUMBER c,VIRTUAL_NUMBER d);
    30.         friend VIRTUAL_NUMBER operator* (VIRTUAL_NUMBER c,VIRTUAL_NUMBER d);
    31.         friend VIRTUAL_NUMBER operator/ (VIRTUAL_NUMBER c,VIRTUAL_NUMBER d);
    32. };
    33.  
    34.  
    35. ostream& operator<< (ostream& os,const VIRTUAL_NUMBER &c)
    36. {
    37.     if (c.b>0)
    38.         os<<" -> So ao: "<<c.a<<"+"<<c.b<<"*i";
    39.     else os<<" -> So ao: "<<c.a<<c.b<<"*i";
    40.     return os;
    41. }
    42.  
    43. istream& operator>> (istream& is,VIRTUAL_NUMBER &c)
    44. {
    45.     cout<<"  - Phan thuc: ";
    46.     is>>c.a;
    47.     cout<<"  - Phan ao: ";
    48.     is>>c.b;
    49.     return is;
    50. }
    51.  
    52. VIRTUAL_NUMBER operator+ (VIRTUAL_NUMBER c,VIRTUAL_NUMBER d)
    53. {
    54.     VIRTUAL_NUMBER e;
    55.     e.a= c.a + d.a;
    56.     e.b= c.b + d.b;
    57.     return e;
    58. }
    59.  
    60. VIRTUAL_NUMBER operator- (VIRTUAL_NUMBER c,VIRTUAL_NUMBER d)
    61. {
    62.     return (c + (-d));
    63. }
    64.  
    65. VIRTUAL_NUMBER operator* (VIRTUAL_NUMBER c,VIRTUAL_NUMBER d)
    66. {
    67.     VIRTUAL_NUMBER e;
    68.     e.a= c.a*d.a - c.b*d.b;
    69.     e.b= d.a*c.b - c.a*d.b;
    70.     return e;
    71. }
    72.  
    73. VIRTUAL_NUMBER operator/ (VIRTUAL_NUMBER c,VIRTUAL_NUMBER d)
    74. {
    75.     VIRTUAL_NUMBER e;
    76.     e.a= (c.a*d.a + c.b*d.b)/(d.a*d.a+d.b*d.b);
    77.     e.b= (d.a*c.b - c.a*d.b)/(d.a*d.a+d.b*d.b);
    78.     return e;
    79. }
    80.  
    81. int main()
    82. {
    83.     VIRTUAL_NUMBER c,d;
    84.     cout<<" * So ao thu nhat: \n";
    85.     cin>>c;
    86.     cout<<" * So ao thu hai: \n";
    87.     cin>>d;
    88.     cout<<c-d;
    89. }

  3. #3
    Ngày gia nhập
    05 2008
    Bài viết
    3

    Mình cũng đang học lập trình hướng đối tượng , nhưng qua đọc tài liệu thì mình biết hàm friend cho phép truy cập vào các biến thuộc private , không bít đúng ko mình chỉ biết cách xài
    Đối với thế giới này lập trình là 1 cái gì đó
    Nhưng đối với 1 ai đó lập trình là cả thế giới này .
    It 's me !!!

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    1,009

    ai có thể giúp đệ hiểu thêm về cách định nghĩa hàm bạn trong public, nếu có code kèm theo để đệ hiểu thì càng tốt
    mình không hiểu cậu hỏi hàm bạn trong public là sao
    cậu xem tính chất của hàm bạn nha:
    hàm bạn tự do không phải là 1 phương thức của lớp,hàm bạn tự do có cách sử dụng giống hệt các hàm thông thường
    - khai báo mẫu hàm bạn tự do trong khuân mẫu lớp ở vj trí nào cũng được,nó không bị ảnh hưởng bởi private hoặc protected ,public
    - trong hàm bạn có thể truy nhập đến thành phần private hoặc protected
    ( truy nhập thông qua đối tượng cụ thể)

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

    Cậu muốn biết hàm bạn có công dụng gì đúng không.Hàm bạn đơn giản là dùng kết nối hai lớp khác nhau để lớp này có thể hiểu được phương thức của lớp kia .


    ví dụ đơn giản:
    khi mình cộng một phân số với một số phức thì trong lớp phân số bạn có thể khai báo như sau

    friend SoPhuc operator+(const SoPhuc &u,const PhanSo &v);
    {
    Các xử lý tính toán.
    }

    còn trong lớp SoPhuc bạn có thể khai báo như sau

    friend PhanSo operator+(const PhanSo &u,SoPhuc &v);
    {
    Các xử lý tính toán.
    }


    ok bạn đã hiểu rồi chứ

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

    Mặc định [ Solved ]Hàm bạn

    Theo mình nghĩ hàm bạn có thể sử dụng cho cả chương trình chứ không chỉ là giữa 2 lớp.
    Trong chương trình bạn sử dụng toán tử trừ là bạn , vậy bạn có thể chồng toán tử trừ một lần nữa nhưng chỉ sử dụng trong lớp đó , ý mình là có cả 2 toán tử trừ đó

    Code:
    friend VIRTUAL_NUMBER operator- (const VIRTUAL_NUMBER c)
    VIRTUAL_NUMBER operator- (const VIRTUAL_NUMBER c)

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

  1. [ Solved ]Xây dựng lớp ĐỒTHI
    Gửi bởi bluesky_123078 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: 09-11-2008, 09:34 AM
  2. [Solved] Hỏi về con trỏ
    Gửi bởi RedHatLinux9 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 17-09-2008, 08:01 AM
  3. [ Solved ]Cấp phát động
    Gửi bởi demontaihack trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 16
    Bài viết cuối: 07-09-2008, 08:23 PM
  4. [ Solved ]Cần hướng dẫn về bài tập màng!!
    Gửi bởi itthuyloi 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: 03-06-2008, 03:00 PM
  5. [ Solved ]Sắp xếp hai dãy số
    Gửi bởi thuchanh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 20-04-2008, 11:47 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