Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: [ Solved ]Constructor Assignment w/ operator

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

    Unhappy [ Solved ]Constructor Assignment w/ operator

    Kim có một chỗ khó trong class thiết kế này:

    C++ Code:
    1. ////////////////////////////////////////////////
    2. // @author: bvKim
    3. // @file: book_class.cpp
    4. // @date: 18-Nov-2008
    5. // @purpose:
    6. // @note:
    7. ////////////////////////////////////////////////
    8. /****************/
    9. /* preprocessor */
    10. /****************/
    11. #include <iostream>
    12. #include <string>
    13.  
    14. /***************
    15.  * @class Book *
    16.  ***************/
    17.  
    18. class Book {
    19.     private:
    20.         std::string _title;
    21.         int         _year;
    22.         std::string _author;
    23.  
    24.     public:
    25.         Book(std::string __title = "title", int __year = 2008, std::string __author = "bvKim")
    26.                 : _title(__title), _year(__year), _author(__author) { };
    27.  
    28.         Book(const Book& __b) {
    29.             // here: how to apply operator '=' here
    30.         }
    31.         ~Book(){ };
    32.  
    33.         Book operator= (const Book& __b) {
    34.             this->_title  = __b.get_title();
    35.             this->_year   = __b.get_year();
    36.             this->_author = __b.get_author();
    37.         }
    38.  
    39.         void set_title(const std::string& __t) {
    40.             this->_title = __t;
    41.         }
    42.         std::string get_title() const {
    43.             return this->_title;
    44.         }
    45.         void set_year(const int& __y) {
    46.             this->_year = __y;
    47.         }
    48.         int get_year() const {
    49.             return this->_year;
    50.         }
    51.         void set_author(const std::string& __a) {
    52.             this->_author = __a;
    53.         }
    54.         std::string get_author() const {
    55.             return this->_author;
    56.         }
    57.  
    58. };
    59.  
    60. /***************/
    61. /* entry point */
    62. /***************/
    63. int main(int argc, char *argv[])
    64. {
    65.     Book book("Finding the heart's true home", 1995, "Foster");
    66.     Book __t(book); // assign
    67.  
    68.     std::cout << __t.get_author() << std::endl;
    69.     std::cout << __t.get_title() << std::endl;
    70.     std::cout << __t.get_year() << std::endl;
    71.  
    72.     // return on success
    73.     return EXIT_SUCCESS;
    74. }

    Cái constructor thứ 2, Kim muốn sử dụng operator '=' nhưng không biết làm thế nào:
    Kim đã thử:
    C++ Code:
    1. (*this) = __b;
    nhưng mà không được.

    Bạn nào giúp Kim một chút.

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

    Muốn dùng lại assignment operator thì dùng :
    C++ Code:
    1. *this = rhs;
    -> where's the return statement ? g++ nó không bắt lỗi cái này, đôi khi vì vậy chú ý khi dùng g++, dùng Visual C++ thì ok.

    Tuy vậy trong đây chẳng mang ý nghĩa gì vì default luôn luôn đúng( shallow copy ). Code không có pointer dynamically allocating.
    I told you this yesterday, did I ?
    C++ Code:
    1. const Book& operator= (const Book& rhs) {
    2.             _title = rhs.title;
    3.             _year = rhs._year;
    4.             _author = rhs._author;
    5.             return *this;
    6.         }

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

    Làm như thía này nè em .

    C++ Code:
    1. Book(const Book& __b) {
    2.             // here: how to apply operator '=' here
    3.             *this = __b;
    4.         }
    5.   Book& operator= (const Book& __b) {
    6.             this->_title  = __b.get_title();
    7.             this->_year   = __b.get_year();
    8.             this->_author = __b.get_author();
    9.  
    10.             return *this; //thêm cu này vào
    11.         }

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

    anh R2 chỗ này
    C++ Code:
    1. const Book& operator= (const Book& rhs) {   // <-- cái const ở ngoài không hợp lệ nha
    2.             _title = rhs.title;
    3.             _year = rhs._year;
    4.             _author = rhs._author;
    5.             return *this;
    6.         }

    không hợp lệ nha , bắt quả tang .. ihihihihihi

    Kim nhớ chỗ này rồi, cảm ơn 2 anh nhiều

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

    Không hiểu ý em ? Không hợp lệ cái gì ?

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

    Mặc định [ Solved ]Constructor Assignment w/ operator

    Trích dẫn Nguyên bản được gửi bởi rox_rook Xem bài viết
    Không hiểu ý em ? Không hợp lệ cái gì ?
    Lúc đầu em tưởng:

    ở đây là assign vào this nên không thể const được

    const Book& <--- như thế này thì làm sao assign được value, nó sẽ sinh ra lỗi
    Em run thử bằng G++ lỗi thật

    Sau đó, em restart lại máy, thử lại với const, thì lại được. Hóa ra là compiler bị conflict.

    Sorry, em nhầm.
    Còn lý do tại sao mà chỗ đó để const thì hiện tại em vẫn chưa tìm ra

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

    Em thử bỏ const để ref thôi rồi dùng :
    C++ Code:
    1. Book a;
    2. Book b;
    3. Book& I_am_a_modify_killer = a = b;
    sau đó :
    C++ Code:
    1. I_am_a_modify_killer.set_title( "SOME_TITLE" );
    Rồi in ra kết quả của b để xem thử !

  8. #8
    Ngày gia nhập
    04 2008
    Bài viết
    336

    In ra kết quả của a mới thấy chứ anh r2 ...
    code ra gió bão

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

    In ra kết quả của a mới thấy chứ anh r2 ...
    Nhầm thật !

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

    Nếu sử dụng const Book& thì sẽ không thể nào viết thế này được:
    C++ Code:
    1. Book& __t = __x = book;
    nhưng thế này thì được:
    C++ Code:
    1. Book& __t = __x;
    __t thay đổi __x sẽ thay đổi theo.

    còn nếu viết
    C++ Code:
    1. Book __t = __x;

    __t thay đổi, __x vẫn là chính nó

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

  1. Lỗi no copy constructor available or copy constructor is declared 'explicit'
    Gửi bởi tun_tun 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: 09-09-2012, 06:02 PM
  2. toán tử Operator>> và Operator<< trên VC++6.0?
    Gửi bởi newbie.blind trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 05-10-2010, 03:43 PM
  3. [ Solved ]Constructor và toán tử gán bằng
    Gửi bởi tunglun trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 13-11-2008, 03:24 PM
  4. [ Solved ]Constructor và toán tử gán bằng
    Gửi bởi tunglun trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 5
    Bài viết cuối: 13-11-2008, 02:13 PM
  5. [ Solved ]Hỏi 1 tí về copy constructor
    Gửi bởi ktwiz trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 21-03-2008, 01:26 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