Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: default value for non-static class member?

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

    Red face default value for non-static class member?

    trong C# có một kiểu khởi tạo giá trị mặc định của class member ví dụ như:
    Code:
    class a {
     private int val = 1;
    }
    còn trong VC++, mình muốn hỏi làm sao làm đc vậy, tất nhiên ngoại trừ việc thêm dòng code khởi tạo val giá trị 1 cho tất cả các constructor.

    Còn câu nữa mình hỏi thêm: Nếu mà 1 biến chưa được assign thì làm sao phân biệt được biến đó.
    Ví dụ:
    ...
    protected:
    class1 *c1;
    }
    bởi như mình được biết thì VC++ (hay C++ nói chung) không cho phép khởi tạo giá trị mặc định của class member nằm ngoài constructor hoặc class functions. Do vậy nếu mà mình có nhiều construcor thì phải làm sao??? Thx
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

    Trong C++ chỉ có const integral mới được khởi gán trong lớp thôi.
    Còn câu nữa mình hỏi thêm: Nếu mà 1 biến chưa được assign thì làm sao phân biệt được biến đó.
    Ví dụ:
    ...
    protected:
    class1 *c1;
    }
    bởi như mình được biết thì VC++ (hay C++ nói chung) không cho phép khởi tạo giá trị mặc định của class member nằm ngoài constructor hoặc class functions. Do vậy nếu mà mình có nhiều construcor thì phải làm sao??? Thx
    Nhiều thì do design thôi, cậu cố viết nhiều vào thì code rối thôi, khởi tạo thì dùng constructor của Base class nếu kế thừa vậy thôi.
    Nếu mà 1 biến chưa được assign thì làm sao phân biệt được biến đó.
    Chưa hiểu ? Biến có tên của nó, thuộc cụ thể 1 lớp nào đó làm sao không phân biệt được ? Đang cố làm gì thì post 1 ví dụ lên mọi người sẽ dễ hình dung hơn, chứ nói vậy cũng khó giải thích cho cậu được lắm !

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

    Cám ơn bạn Rox nhé. Thực ra tớ cũng nghĩ là không có cách nào ngoài việc cho hết vào tất cả các constructor, nhưng mà cứ hỏi vậy để thỉnh giáo xem có thể hay không đó mà.
    Còn về câu hỏi 2 vì code của tớ cũng khá nhiều nên tớ ngại post ví dụ lên. Ý tớ nói chung là làm sao mà nhận dạng được những con trỏ chưa được khởi tạo giá trị đó mà.

    Ví dụ như nếu tớ có:
    1) Class1 *c1;
    2) Class1 *c1 = NULL;
    3) Class1 *c1 = new Class1();

    thì rõ ràng 3 cái khác hẳn nhau đúng không. Như vậy, trong 1 hoàn cảnh cụ thể cần dùng tới c1, làm sao để tớ phân biệt được c1 thuộc loại nào (hay cụ thể hơn, có thuộc loại 1 hay kô)?
    Đã được chỉnh sửa lần cuối bởi guest : 14-05-2008 lúc 09:48 AM.

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

    Tui thì nghĩ biến dựa vào tên biến, còn được khởi tạo hay chưa thì đâu có vấn đề gì ? Tui mù C# nên thực sự tui không biết C# nó có khác hay không ? Nhưng nếu class có con trỏ của class khác thì run-time khởi tạo khởi gán cũng đâu có vấn đề gì. Hoặc dùng constructor của class đó khởi tạo cho nó.
    Do tui cũng không thể biết cậu đang muốn làm gì nên tui tạm đưa 1 ví dụ đơn giản, cậu muốn làm gì thì cậu có thể list ra cụ thể, tui biết thì tui sẽ cố giúp !
    C++ Code:
    1. #include <iostream>
    2. #include <string>
    3.  
    4. using std::string;
    5.  
    6. const int S = 5;
    7. class First
    8. {
    9. private :
    10.     int    data;
    11.     string str;
    12. public :
    13.     First( int data = 0, string str = "")
    14.         :data( data ), str( str )
    15.     {   }
    16. };
    17.  
    18. class Second
    19. {
    20. private :
    21.     First* to_first;
    22. public :
    23.     /*
    24.         Tui khởi tạo cho dữ liệu của class First ở đây
    25.     */
    26.     Second()
    27.     {
    28.         to_first = new First[ 5 ];
    29.     }
    30.     ~Second()
    31.     {
    32.         delete[] to_first;
    33.     }
    34. };
    35.  
    36.  
    37. int main()
    38. {
    39.     Second ob;
    40.  
    41.     return 0;
    42. }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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

  1. [C#] Bản chất thành viên tĩnh (static member) ?
    Gửi bởi ngthanhduc3011 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 22-07-2013, 01:11 PM
  2. Lỗi Invalid token 'char' in class, struct, or interface member declaration
    Gửi bởi 123zo23zo23uong trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 0
    Bài viết cuối: 09-12-2012, 09:31 AM
  3. Thắc mắc về sử dụng static class
    Gửi bởi blindknight47 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 28-09-2011, 10:52 AM
  4. Thắc mắc về static member ?
    Gửi bởi ns.hermione trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 8
    Bài viết cuối: 27-04-2010, 12:15 PM
  5. Biến đổi protect member trong base class thành public member trong subclass.
    Gửi bởi Kevin Hoang 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: 30-07-2006, 02:18 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