2011-11-22 22 views
7
class gene{ 
    int ind; 

    gene() { 
     ind = 0; 
    } 
} 

class network { 
    gene g[10]; 
} 

main() { 
    network n; 
} 

Tôi có nên gọi các hằng số cho từng đối tượng trong mảng g hoặc nó sẽ được gọi tự động không?Có phải hàm tạo được gọi ngay lập tức cho một mảng các đối tượng như là một thành viên của lớp không?

ví dụ, tôi nên thay đổi lớp mạng như sau:

class network { 
    gene g[10]; 

    network() { 
     for(int i = 0; i < 10; i++) 
      g[i] = gene(); 
    } 
} 
+2

Nếu nó không phải là đã được xây dựng, thay đổi của bạn sẽ là một thảm họa. Bạn sẽ gọi 'operator =' trên một đối tượng không bị cản trở. –

+2

Tôi không cố gắng để được snarky, nhưng trong thời gian nó đã đưa bạn để đặt câu hỏi, bạn có thể đã thử nghiệm nó. –

+3

@Steve: Thử nghiệm sẽ chỉ chứng minh hành vi của một trình biên dịch, điều này không nhất thiết phải được đảm bảo bởi tiêu chuẩn. – ildjarn

Trả lời

7

Trong trường hợp của bạn, bởi vì gene có một constructor mặc định không tầm thường, mỗi phần tử của mảng sẽ là mặc định-xây dựng cho bạn. Tức là, không, thay đổi của bạn là không cần thiết.

Trong trường hợp loại cơ bản của mảng của bạn là loại POD, bạn sẽ cần phải khởi tạo các yếu tố theo cách thủ công. Tuy nhiên, cách bạn đang làm nó không phải là lý tưởng; bạn sẽ muốn sử dụng giá trị khởi tạo thay vì:

class network { 
    somePodType x[10]; 
public: 
    network() : x() { } 
}; 
Các vấn đề liên quan