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

Đề tài: Constructor và Destructor của lớp cơ sở !?

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

    Mặc định Constructor và Destructor của lớp cơ sở !?

    Em mới học lập trình C++ nên có vài thắc mắc mong đc giả đáp

    Theo lí thuyết, các đối tượng của lớp thừa kế sẽ gọi các constructor và destructor của lớp cơ sở !

    --> Nhưng em ko hiểu tại sao lại làm như vậy ? Làm như vậy có tác dụng gì không ?

  2. #2
    Ngày gia nhập
    11 2008
    Nơi ở
    vngameday.com
    Bài viết
    62

    mình xin hỏi bạn:

    - Thứ nhất: khi bạn truy cập các method của lớp cơ sở thông qua lớp con, thì hàm đó lấy dữ liệu ở đâu để tính toán.

    - thứ 2 là có contructor thì có destructor hoặc ko có thì cái này, mình ko bàn bạn tự tìm hiểu.

    - Mình xin trả lời bạn là: khi khởi tạo lớp con người ta thường khởi tạo luôn lớp cha nhằm mục đích khởi tạo các giá trị của lớp cha ứng với dữ liệu mà lớp con đang có. Điều này sẽ có tác dụng khi mà bạn truy xuất đến method hay property của lớp cha, thông qua lớp con.

    - Nếu giả sử ko khởi tạo cho lớp cha ở lớp con, thì khi bạn truy suất vào dữ liệu hay method lớp cha thông qua lớp con sẽ gây ra lỗi.

    Hy vọng bạn sẽ hiểu điều này, có lẽ mình viết có gì sai sót mong các bạn đóng ghóp, xin cảm ơn !
    Đã được chỉnh sửa lần cuối bởi kkmct : 18-01-2009 lúc 09:31 AM.
    vngameday.com - khi niềm đam mê luôn rực cháy. Rất mong nhận được sự đóng góp từ các bạn...

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

    Trích dẫn Nguyên bản được gửi bởi howto Xem bài viết
    Em mới học lập trình C++ nên có vài thắc mắc mong đc giả đáp

    Theo lí thuyết, các đối tượng của lớp thừa kế sẽ gọi các constructor và destructor của lớp cơ sở !

    --> Nhưng em ko hiểu tại sao lại làm như vậy ? Làm như vậy có tác dụng gì không ?
    ừ vì các dt lớp thừa kế thừa kế tất cả các method và property của lớp cơ sở nhưng các pt của lớp thừa kế ko dc truy nhập đến các property này vì thế phải gọi đến hàm tạo lớp cơ sở
    I dlatego lubię mówić z tobą !!!

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

    Vâng em hiểu rồi
    Còn một vấn đề nữa là "hàm trả về tham chiếu". Cái này dùng làm sao và trường hợp nào thì sử dụng ?

  5. #5
    Ngày gia nhập
    09 2008
    Nơi ở
    Kĩ viện
    Bài viết
    169

    Là nó bắn về một cái tham chiếu.

    Code:
    int& getInt();
    hoặc

    Code:
    const int& getInt();
    Phá toái hư không - Bạch nhật thăng thiên.

  6. #6
    Ngày gia nhập
    11 2008
    Nơi ở
    vngameday.com
    Bài viết
    62

    Mặc định Constructor và Destructor của lớp cơ sở !?

    Bạn nên tham khảo 1 bài viết ở dưới đây, mình xin giữ nguyên lời của tác giả

    - Thế nào là hàm trả về tham chiếu ?
    Hàm trả về tham chiếu tức là những hàm có dạng

    DATATYPE& func(...) {
    ...
    return aDATATYPE; //aDATATYPE là biến thuộc kiểu DATATYPE
    }


    - Hàm trả về tham chiếu dùng để làm jì ?
    Có 2 cách trả về của hàm là: tham chiếu (hay tham biến), và tham trị. Hàm trả về tham chiếu được dùng để tránh gọi Copy Constructor. Vì hàm trả ra tham trị luôn gọi cho gọi Copy Constructor, tham chiếu thì luôn không

    - Khi nào nên và không nên sử dụng hàm trả về tham chiếu ?
    Tham chiếu luôn tốt hơn tham trị về mặt performance, nên bất kỳ khi nào dùng được tham chiếu thì nên dùng, vì có những trường hợp không thể dùng được tham chiếu

    Vậy thì khi nào thì dùng được tham chiếu: Trong trường hợp hàm kết thúc mà biến được trả về của hàm vẫn còn tồn tại thì dùng được tham chiếu

    Trong trương hợp nào thì kết quả trả về của hàm vẫn còn tồn tại khi hàm kết thúc:

    - Khi hàm là thành viên của lớp, và biến trả về là thành viên của lớp


    VD:

    class C {
    int x;
    int& getX() { return x;} //biến x là biến của lớp, nên hàm này trả về tham chiếu được
    }


    - Khi biến được trả về có tầm vực cao hơn tầm vực của hàm


    VD:
    int& processX(int& x) { return x; } // hàm này nhận vào tham chiếu x, tức là biến x đã tồn tại bên ngoài hàm, nên hàm trả ra tham chiếu x được


    - Khi kết quả trả về được cấp phát động, và không được giải phóng trong hàm (trường hợp này hơi không hợp lý, vì trong lập trình hướng đối tượng ko ai làm như vậy cả, chỉ nêu ra để hiểu thêm)


    VD: int& alloc1int() { return int *pInt = new int; return *pInt; }


    còn đây là ví dụ về không dùng được tham chiếu:

    int& func() { int x; ... return x; } //biến x cục bộ, thoát hàm là mất, nên không thể dùng tham chiếu
    // mà chỉ dùng được tham trị như sau
    // int func() { int x; ... return x; } // (bỏ đi dấu &)
    - Bạn cứ hiểu đơn giản là nó trả về địa chỉ vì vậy phải có địa chỉ để trả về.

    Chúc bạn thành công !
    Đã được chỉnh sửa lần cuối bởi kkmct : 19-01-2009 lúc 04:24 PM.
    vngameday.com - khi niềm đam mê luôn rực cháy. Rất mong nhận được sự đóng góp từ các bạn...

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

  1. Lập trình C++ bản chất của constructor và destructor trong một lớp như thế nào?
    Gửi bởi kutoyeuem trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 06-12-2010, 01:27 AM
  2. “Nếu lớp có Destructor ảo sẽ có constructor ảo”, phải vậy ko?
    Gửi bởi thientamtita trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 24
    Bài viết cuối: 25-06-2010, 03:14 AM
  3. Constructor và Destructor chạy trong Dev-C??
    Gửi bởi soujiro_seta trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 08-09-2009, 01:24 PM
  4. [C++] Cách sử dụng Constructor va Destructor trong C++
    Gửi bởi nguyenvuthang 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: 18-02-2009, 12:03 AM
  5. Hàm constructor và destructor
    Gửi bởi 1st | Kylin trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 03-06-2008, 01:56 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