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

Đề tài: Ký hiệu lạ trong hàm tạo có tham số của lớp trong C++

  1. #1
    Ngày gia nhập
    07 2011
    Nơi ở
    Moscow-Russia
    Bài viết
    140

    Mặc định Ký hiệu lạ trong hàm tạo có tham số của lớp trong C++

    Trong đoạn code này thì trong hàm tạo có tham số Line(Point a, Point b) lại xuất hiện a(a), b(b), điều này có ý nghĩa gì vậy các bạn? Mong được giải thích ý nghĩa của cái đoạn a(a), b(b) trong code này, cảm ơn.

    Code:
    class Line {
    public:
        Point a, b;
        Line() {}
        Line(Point a, Point b): a(a), b(b) {}
    };
    A good beginning and a good ending !

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    556

    Nói chung, a(x) nghĩa là tạo a theo x (gọi hàm tạo a, sao chép giá trị của x cho a). Và trong trường hợp này, a(a) nghĩa là tạo a này theo a kia.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  3. #3
    Ngày gia nhập
    07 2011
    Nơi ở
    Moscow-Russia
    Bài viết
    140

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Nói chung, a(x) nghĩa là tạo a theo x (gọi hàm tạo a, sao chép giá trị của x cho a). Và trong trường hợp này, a(a) nghĩa là tạo a này theo a kia.
    Mình hiểu rồi, có nghĩa hai cách viết sau là tương đương:

    Code:
    class Line {
    public:
        Point a, b;
        Line() {}
        Line(Point x, Point y): a(x), b(y) {}
    };
    Hoặc:

    Code:
    class Line {
    public:
        Point a, b;
        Line() {}
        Line(Point x, Point y) {a=x; b=y;}
    };
    Phải không bạn? Viết ban đầu nó sẽ gọn hơn, nhưng không tường mình như cách viết thứ hai.
    Đã được chỉnh sửa lần cuối bởi Moscow : 30-05-2019 lúc 05:23 PM.
    A good beginning and a good ending !

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    556

    Hai cách viết mô tả hai diễn biến khác nhau, dù có thể cho kết quả giống nhau.

    Ở cách viết thứ nhất, việc tạo một Line từ hai Point x, y bao gồm tạo hai Point thành viên a, b lấy giá trị lần lượt từ x, y.

    Ở cách viết thứ hai, việc tạo một Line từ hai Point x, y bao gồm:

    1. Tạo hai Point thành viên a, b bằng hàm tạo Point mặc định. Hàm này có thể, chẳng hạn, gán giá trị mặc định nào đó cho Point.

    2. Gán (sao chép) giá trị của x, y lần lượt vào hai Point thành viên a, b vừa tạo.

    Như vậy, nếu hàm tạo Point mặc định gán trị mặc định cho Point, cách viết thứ nhất đảm bảo mỗi Point thành viên chỉ được gán trị một lần, cách viết thứ hai làm cho mỗi Point thành viên được gán trị hai lần. Lần đầu là thừa.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  5. #5
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Trích dẫn Nguyên bản được gửi bởi Moscow Xem bài viết
    ... Viết ban đầu nó sẽ gọn hơn, nhưng không tường mình như cách viết thứ hai.
    Về sự khác biệt, bài #4 đã giải thích rồi, tôi không nhắc lại.

    Về sự tường minh, lý luận rằng cách viết thứ hai gọn hơn là chủ quan. Người viết và đọc code hàm dựng quen rồi sẽ thấy cách 1 tường minh hơn.

    Riêng code ở bài đầu của bạn. Cách gán như vậy là cách bắt buộc - nếu không muốn dùng con trỏ "this".
    Luật của C++: nếu tên tham số trùng với tên thuộc tính mà chúng cần gán thì bắt buộc phải dùng danh sách gán.
    Tham số a, b trùng tên với thuộc tính a, b. Nếu muốn gán bên trong hàm thì phải dùng:
    this->a = a; this->b = b;

  6. #6
    Ngày gia nhập
    07 2011
    Nơi ở
    Moscow-Russia
    Bài viết
    140

    Mặc định Ký hiệu lạ trong hàm tạo có tham số của lớp trong C++

    Cảm ơn mọi người tham gia góp ý cho mình nhé. Mình cũng tạm hiểu chút thôi, nó trừu tượng quá. Hj.
    A good beginning and a good ending !

Tags của đề tài này

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