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

Đề tài: [C++] Hỏi về "Copy constructor" ???

  1. #1
    No Avatar
    phoenix2007 Khách

    Question [C++] Hỏi về "Copy constructor" ???

    Mình hiện đang theo học OOP, mình vẫn chưa hiểu về phương thức tạo bản sao ! Các bạn có thể giảg thêm cho mình được kô, về "Các tạo pttl tạo bản sao, cách sử dụng, và công dụng của nó" ! thanks a lot !
    PS : cho ví dụ cho dễ hiểu he các bác !

  2. #2
    No Avatar
    phoenix2007 Khách

    Các bác ơi !

  3. #3
    No Avatar
    doduyhai106 Khách

    mấy cái này thì bạn thử xem trong quyển lập trình c++ hướng đối tượng of Phạm Văn Ất xem , họ nói kỹ lắm

  4. #4
    Ngày gia nhập
    08 2006
    Nơi ở
    TpHCM
    Bài viết
    202

    Copy constructor là một constructor có dạng

    class C {
    C(const C& aC) {} //đây là Copy constructor, tham số của nó luôn là const TênLớp&
    }

    Copy Constructor được gọi khi nào:
    - Khi hàm được truyền vào tham trị (tham biến thì không)
    VD
    void func1(C aC) {} // khi gọi hàm func1 thì Copy Constructor của C được gọi
    void func2(C& aC) {} // khi gọi hàm func2 thì Copy Constructor của C không được gọi

    - Khi hàm được trả ra tham trị (tham biến thì không)
    C func3() {} // khi gọi hàm func3 thì Copy Constructor của C được gọi
    C& func4() {} // khi gọi hàm func4 thì Copy Constructor của C không được gọi
    - Khi gán (chỉ nếu trong lớp đó không có toán tử gán)
    VD
    C aC1;
    C aC2 = aC1; // gọi copy constructor nếu không định nghĩa toán tử =

    - Khi copy
    VD
    C aC1;
    C aC2(aC1); // gọi copy constructor

    Công dụng của copy constructor thì đương nhiên là làm cho 2 đối tường giống hệt nhau, nếu có biến thành viên cấp phát động thì nên được copy cho nhau, không đơn thuần là sử dụng phép gán. Nếu không định nghĩa copy constructor thì 1 copy constructor mặc định sẽ được thay để gọi khi cần, constructor mặc định thì luôn sử dụng phép gán

    VD
    class C {
    int x;
    int *arr; //mảng động

    C (const C& aC) //copy constructor
    {
    x = aC.x;
    //arr = aC.arr; //không nên gán thế này vì 2 đối tượng sẽ dùng chung mảng động, mà nên sử dụng memcpy hoặc gán từng phần tử như bên dưới.
    memcpy(arr, aC.arr, someOfBytes);
    }
    }

  5. #5
    Ngày gia nhập
    08 2006
    Nơi ở
    Hải Phòng
    Bài viết
    78

    copy constructor như bác nguyentuan2 nói quá rõ rồi đó bài viết thật hay cám ơn bác nhiều !
    thân bác !
    Đã được chỉnh sửa lần cuối bởi huongit1984 : 14-01-2007 lúc 11:43 AM.

  6. #6
    No Avatar
    phoenix2007 Khách

    Mặc định [C++] Hỏi về "Copy constructor" ???

    Ok, cám ơn bác nguyentuàn nhìu !

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

  1. Lỗi "...does not contain a constructor that take 0 arguments"
    Gửi bởi trongducvtc trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 30-05-2012, 07:04 PM
  2. Problems : " recover tree " with input as " preorder" and "inorder"
    Gửi bởi HoangManhHa1991 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: 13-04-2011, 10:19 PM
  3. Làm thế nào để mở "chế độ" cho phép copy/paste trên một trang web?
    Gửi bởi peterdrew trong diễn đàn Thắc mắc chung
    Trả lời: 4
    Bài viết cuối: 28-01-2011, 10:33 AM
  4. Lỗi "constructor initializer" khi triển khai hàm kế thừa ? (Lập trình C++)
    Gửi bởi nguoixanh trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 25-11-2010, 09:59 AM
  5. Lỗi "no appropriate default constructor available"
    Gửi bởi dkthinh 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: 08-01-2010, 12:16 AM

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