2011-12-22 21 views
5

Nếu tôi có một lớp:Initialize mảng các đối tượng lớp trong constructor của một lớp

class A 
{ 
private: 
    char z; 
    int x; 

public: 
    A(char inputz, int inputx); 
    ~A() {} 
} 

Tôi muốn làm một mảng của A trong lớp B.

class B 
{ 
private: 
    A arrayofa[26]; 

public: 
    B(); 
    ~B() {} 
    void updatearray(); // This will fill the array with what is needed. 
} 


class B 
{ 
    B:B() 
    { 
     updatearray(); 
     std::sort(&arrayofa[0], &arrayofa[26], A::descend); 
    } 
} 

Làm thế nào để rõ ràng khởi tạo arrayofa trong constructor của B?

+0

Xây dựng các đối tượng trong một hàm tạo thường là một ý tưởng tồi. Mục đích chính xác của bạn là gì? – Corbin

+0

'A :: descend' là gì? Cách bình thường để sắp xếp mọi thứ theo thứ tự giảm dần là xác định toán tử so sánh bình thường cho lớp, và sau đó sử dụng 'std :: greater'. –

Trả lời

2

Trình tạo mặc định sẽ được gọi tự động (đối với không phải POD). Nếu bạn cần một hàm tạo khác, bạn sẽ không may mắn, nhưng bạn có thể sử dụng vector để thay thế sẽ hỗ trợ những gì bạn cần.

3

Bạn không thể.

Mỗi phần tử trong mảng sẽ được khởi tạo bởi hàm tạo mặc định (không có hàm tạo tham số).

Cách thay thế tốt nhất là sử dụng vectơ.
Tại đây bạn có thể chỉ định một giá trị sẽ được copy vào xây dựng tất cả các thành viên của vector:

class B 
{ 
private: 
    std::vector<A> arrayofa; 
public: 
    B() 
     : arrayofa(26, A(5,5)) 
      // create a vector of 26 elements. 
      // Each element will be initialized using the copy constructor 
      // and the value A(5,5) will be passed as the parameter. 
    {} 
    ~B(){} 
    void updatearray();//This will fill the array with what is needed 
} 
1

Đầu tiên cần có một constructor mặc định cho class A, khác B() sẽ không biên dịch. Nó sẽ cố gắng gọi hàm tạo mặc định của các thành viên của class B trước khi phần thân của hàm tạo bắt đầu thực hiện.

Bạn có thể khởi tạo arrayofa như thế này:

void B::updatearray() 
{ 
    arrayofa[0] = A('A', 10); 
    arrayofa[1] = A('B', 20); 
    ... 
} 

Nó sẽ là tốt hơn để sử dụng std::vector thay vì mảng.

std::vector<A> v(26, A('a', 10)); //initialize all 26 objects with 'a' and 10 
Các vấn đề liên quan