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ố 19 kết quả

Đề tài: ctor c++

  1. #1
    Ngày gia nhập
    09 2014
    Nơi ở
    Bồng Lai
    Bài viết
    27

    Mặc định ctor c++

    C++ Code:
    1.  
    2. // viet the nay
    3.  
    4. class A{
    5.  int a;
    6.  float b;
    7. public:
    8.  A(int x, float y){
    9.   a =x;
    10.   b = y;
    11.  }
    12. };
    13.  
    14. // hay viet la
    15.  
    16. class A{
    17.  int a;
    18.  float b;
    19. public:
    20.  A(int x, float y):a(x), b(y){}
    21. };

    thế thì nên viết như cách 1 hay 2.
    từng nghe nói là nên viết kiểu thứ 2 chỉ trừ trường hợp bất khả kháng.
    vậy trường hợp bất khả kháng đó là khi nào.


    C++ Code:
    1.  
    2. template<class A>
    3.  
    4. template<typename A>

    nên dùng cái trường hợp nào.
    trường hợp nào thì không thể dùng cái nào. có cái nào dùng được cho mọi trường hợp không ạ.


    mong mn chỉ giúp.



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

    Viết theo cách thứ 2 nhé: http://www.parashift.com/c++-faq-lite/init-lists.html

    Còn cái template thì cả hai đều như nhau, nhưng nên dùng typename thay vì class để tránh hiểu nhầm.

  3. #3
    Ngày gia nhập
    09 2014
    Nơi ở
    Bồng Lai
    Bài viết
    27

    Trích dẫn Nguyên bản được gửi bởi boss14420 Xem bài viết
    Viết theo cách thứ 2 nhé: http://www.parashift.com/c++-faq-lite/init-lists.html

    Còn cái template thì cả hai đều như nhau, nhưng nên dùng typename thay vì class để tránh hiểu nhầm.
    cảm ơn bạn.
    thế cái trường hợp bất khả kháng là trường hợp nào ạ.
    cái link bạn đưa mơ hồ quá ạ.

  4. #4
    Ngày gia nhập
    09 2014
    Nơi ở
    Bồng Lai
    Bài viết
    27

    Trích dẫn Nguyên bản được gửi bởi boss14420 Xem bài viết
    Viết theo cách thứ 2 nhé: http://www.parashift.com/c++-faq-lite/init-lists.html

    Còn cái template thì cả hai đều như nhau, nhưng nên dùng typename thay vì class để tránh hiểu nhầm.
    cảm ơn bạn.
    thế cái trường hợp bất khả kháng là trường hợp nào ạ.
    cái link bạn đưa mơ hồ quá.

  5. #5
    Ngày gia nhập
    09 2014
    Nơi ở
    Bồng Lai
    Bài viết
    27

    Trích dẫn Nguyên bản được gửi bởi boss14420 Xem bài viết
    Viết theo cách thứ 2 nhé: http://www.parashift.com/c++-faq-lite/init-lists.html
    cảm ơn bạn nhiều. nhưng nó mơ hồ quá. mình không hiểu được.

    bạn nói rõ ràng được không!!!

  6. #6
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    933

    Mặc định ctor c++

    Nếu không vướng mắc một số trường hợp ngoại lệ ( như lớp có thành phần hằng ...), thì nên viết theo cách 1 sẽ rất dễ nhìn, đặc biệt là các bạn từ C chuyển sang C++. Cách viết thứ 2 chỉ nên tham khảo khi cách 1 không đáp ứng được.

  7. #7
    Ngày gia nhập
    04 2011
    Nơi ở
    Hà Nội
    Bài viết
    248

    Trích dẫn Nguyên bản được gửi bởi MHoang Xem bài viết
    Nếu không vướng mắc một số trường hợp ngoại lệ ( như lớp có thành phần hằng ...), thì nên viết theo cách 1 sẽ rất dễ nhìn, đặc biệt là các bạn từ C chuyển sang C++. Cách viết thứ 2 chỉ nên tham khảo khi cách 1 không đáp ứng được.
    Nguyên tắc muôn thưở là luôn dùng cách 2 chứ nhỉ? cách 2 cũng vô cùng dễ nhìn, gần như lúc nào cũng sử dụng được, đã thể còn nhanh nữa. C++ bây giờ nó khác C lắm rồi nên mình nghĩ ko nên gộp 2 cái vào với nhau. Coi C++ là một ngôn ngữ riêng biệt đi.

  8. #8
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    933

    Không thể nói đây là nguyên tắc được mà là sự thông dụng dễ dùng. Mình biết khi nêu vấn đề ra sẽ gặp nhiều ý kiến trái chiều. Viết theo cách 2 có xu hướng làm cho mã khó hiểu. Về hình thức, khi số lượng biến thành viên tăng lên nhiều thì bắt đầu khó nghĩ, viết khởi tạo trên cùng dòng thì quá dở mà nhiều dòng thì có khác gì tự đề cao cách 1. Về cú pháp, dấu "=" có chức năng rõ ràng hơn, cặp dấu ngoặc thì lại được sử dụng trong rất nhiều ngữ cảnh. Tóm lại, mình thấy cái gì càng đơn giản thì càng nên sử dụng, mời các bạn tiếp tục. Thân.

  9. #9
    Ngày gia nhập
    04 2011
    Nơi ở
    Hà Nội
    Bài viết
    248

    Trích dẫn Nguyên bản được gửi bởi MHoang Xem bài viết
    Không thể nói đây là nguyên tắc được mà là sự thông dụng dễ dùng. Mình biết khi nêu vấn đề ra sẽ gặp nhiều ý kiến trái chiều. Viết theo cách 2 có xu hướng làm cho mã khó hiểu. Về hình thức, khi số lượng biến thành viên tăng lên nhiều thì bắt đầu khó nghĩ, viết khởi tạo trên cùng dòng thì quá dở mà nhiều dòng thì có khác gì tự đề cao cách 1. Về cú pháp, dấu "=" có chức năng rõ ràng hơn, cặp dấu ngoặc thì lại được sử dụng trong rất nhiều ngữ cảnh. Tóm lại, mình thấy cái gì càng đơn giản thì càng nên sử dụng, mời các bạn tiếp tục. Thân.
    Cách 2 khác cách 1 ko chỉ về cú pháp nhiều dòng hay một dòng (bạn có thể xem link mà boss14420 đã đưa). Đã làm việc với C++ thì không ai lạ gì cú pháp này (bạn cũng vậy mà).
    Bạn có thể cho mình nhận xét xem viết thế này có khó hiểu, khó đọc ko?
    C++ Code:
    1. class Sample
    2. {
    3. private:
    4.     int var1;
    5.     int var2;
    6.     float var3;
    7.     float var4;
    8.     std::string str;
    9.     std::vector<int> vec;
    10. public:
    11.     Sample()
    12.         : var1{1}
    13.         , var2{2}
    14.         , var3{3.f}
    15.         , var4{4.5f}
    16.         , str{"Hello, world"}
    17.         , vec{1, 2, 3, 4}
    18.  
    19.     { }
    20.    
    21. };

  10. #10
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    933

    Đúng như bạn nói, 2 cách không chỉ khác về cú pháp ( mình cũng đã nói ở #3 phía trên). Mình không lạ gì với cú pháp này, link của boss14420 cũng tương tự như các link khác và các tài liệu mà mình đã xem qua. Cách viết của bạn không có gì khó hiểu và khó đọc cả, bạn không cần chứng minh điều đó. Điều mình muốn nói là cách viết 2 có xu hướng làm phức tạp hóa những dòng lệnh đơn giản.
    Nếu phải chọn trước khi vào bên trong
    Code:
            : var1{1}
    Và khởi tạo ở bên trong
    Code:
            var1 = 1;
    Mình sẽ chọn dòng thứ 2. Thân.

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