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

Đề tài: Giải thích dòng Code Visual C++ trong Constructor với const built-in data

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

    Mặc định Giải thích dòng Code Visual C++ trong Constructor với const built-in data

    Trong quyển sách C++ How To Program, phiên bản 5, chương 10.2 có một số dòng code như sau

    Header File: Increment.h
    C++ Code:
    1. // 10.2.2 Class declaration
    2.  
    3. #include "stdafx.h"
    4. #ifndef INCREMENT_H
    5. #define INCREMENT_H
    6.  
    7. class Increment
    8. {
    9. private:
    10.     int count;
    11.     const int increment; //const data member
    12. public:
    13.     Increment(int c=0, int i=1); //Constructor
    14.     void addIncrement()
    15.     {
    16.         count +=increment;
    17.     }
    18.     void print() const;
    19. };
    20. #endif

    Member Functions Declarations: Increment.cpp
    C++ Code:
    1. // Member Functions for Increment.h
    2.  
    3.  4  #include <iostream>
    4.  5  using std::cout;
    5.  6  using std::endl;
    6.  7
    7.  8  #include "Increment.h" // include definition of class Increment
    8.  9
    9. 10  // constructor
    10. 11  Increment::Increment( int c, int i )
    11. 12     : count( c ), // initializer for non-const member        
    12. 13       increment( i ) // required initializer for const member
    13. 14  {
    14. 15     // empty body
    15. 16  } // end constructor Increment
    16. 17
    17. 18  // print count and increment values
    18. 19  void Increment::print() const
    19. 20  {
    20. 21     cout << "count = " << count << ", increment = " << increment << endl;
    21. 22  } // end function print

    Pro nào giúp mình giải thích dòng code 11 -> 13 với.

  2. #2
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Dòng 11: Lợi dụng kỹ thuật dùng initialiser (khởi trị) để thay thế cho assignment (gán trị).

    Dòng 13: Bắt buộc phải dùng initialiser vì biến đó là const, không assign (gán) được.

    Lưu ý là bên trong hàm dựng Increment, ta có thể đặt
    count = c;
    nhưng không thể đặt
    increment = i; // increment là const, compiler không cho gán trị

    Một số người lập luận rằng initialiser nhanh hơn assignment. Nhưng đó là ngoài phạm vi của câu hỏi.

    tb từ "Pro" đối với tôi có nghĩa xấu -> dị ứng.

  3. #3
    Ngày gia nhập
    11 2010
    Bài viết
    3

    Initializer không phải nhanh hơn Assignment

    Mình mới đọc thêm một số tài liệu. Trước khi vào phần thần (nằm trong dấu {} ), C++ sẽ khởi tạo các giá trị mặc định cho mọi biến có trong class. Vào phần thân rồi, chúng ta mới bắt đầu gán các giá trị cho các biến đó.

    Initializer sẽ "chiếm đoạt" công việc khởi tạo đó. Như vậy bạn sẽ trực tiếp khởi tạo biến bằng một giá trị do bạn qui định. Điều này được khuyến khích. Việc gán giá trị cho biến trong thân của Constructor không được khuyến khích.

    Theo mình hiểu là như vậy, không biết có sai chỗ nào không?

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Xin lập lại:

    Một số người (tôi có nói là tôi đâu?) lập luận rằng initialiser nhanh hơn assignment. Nhưng đó là ngoài phạm vi của câu hỏi. (ngoài phạm vi có nghĩa là không muốn bàn)
    Bạn hỏi về hai dòng 11 và 13, và đã nhận được câu trả lời. Điểm quan trọng cần chú ý là câu "required initializer for const member". Các điểm khác không quan trọng.

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

  1. Code làm debug từng dòng như Visual Studio
    Gửi bởi bubu333 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 03-04-2013, 09:10 PM
  2. Cách add new data source để tạo form giao diện trong visual?
    Gửi bởi kioko9x trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 24-03-2013, 03:51 AM
  3. Database Làm sao get data trong bảng dòng từng dòng theo số dòng i
    Gửi bởi theClassicMan27 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 26-04-2012, 01:17 AM
  4. visual studio 2010 ko tự sinh code và lùi dòng
    Gửi bởi hunterboy2811 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 15-03-2011, 10:43 PM
  5. Tạo project C/C++ và built với Visual Studio - Hướng dẫn bằng hình ảnh
    Gửi bởi Xcross87 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 09-04-2007, 05:21 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