2012-10-01 65 views
6

Tôi đang viết một lớp Matrix2D. Lúc đầu tôi đã sử dụng constructor như folows,C++ class constructor cho mảng

Mã của tôi:

Matrix2D(float a,float b, float c,float d) 
{ 
    a_=a; 
    .... 
} 

Tuy nhiên, tôi đã chỉ nhận ra rằng nó sẽ là tốt hơn rất nhiều nếu tôi có thể sử dụng đa chiều array [2][2]. Đó là nơi mà vấn đề nằm, Làm cách nào để viết hàm tạo cho mảng?

class Matrix 
{ 
    float matrix[2][2]; 
    public: 
    Matrix2D(float a,float b,float c, float d) 
    { 
     matrix[2][2]={a,b,c,d} // not valid 
    } 
} 

Để cho bạn biết, tôi không yêu cầu mã hoàn chỉnh. Tôi chỉ cần một người để đưa tôi đi đúng hướng.

+2

BTW, tên lớp và tên hàm tạo cần phải khớp. –

+0

thx, chỉ lỗi đánh máy của nó, chúng khớp với mã nguồn – Tomas

Trả lời

4

Đối C++ 11 bạn có thể làm:

Matrix(float a,float b,float c, float d) : 
    matrix{{a,b},{c,d}} 
{ 
} 

Không có thay thế sạch cho 03C++.

+0

Bạn cần phải tắt các dấu ngoặc đơn, tức là 'ma trận {{a, b}, {c, d} } 'bởi vì nó là một mảng. –

+0

@JesseGood http://ideone.com/9PQNK –

+0

@ JesseGood bạn có chắc chắn không? –

2
matrix[0][0] = a; // initialize one element 

v.v.

+0

Thx cho câu trả lời. Đó là cách tôi sẽ làm điều đó – Tomas

0

Nếu nó sẽ là ma trận 2X2, thì bạn có thể chuyển mảng float và sau đó lặp lại nó.

ví dụ

for(int x = 0;x<4;x++) 
{ 
    matrix[0][x] = myarray[x]; 
} 
+0

@LuchianGrigore làm thế nào là không hợp lệ? –

+0

@coolbartek Nếu 'ma trận' được khai báo là' ma trận nổi [2] [2] 'thì' ma trận [0] [3] 'rõ ràng là không hợp lệ. –

+0

nó có vẻ tốt cho tôi, một mảng hai chiều thực sự là một mảng bình thường, nơi bạn có thể truy cập các yếu tố bằng [0] [x]. Một mảng [x] [y] giống với một mảng [0] [x * y] –

0

Phiên bản của Luchian là tốt nhất nếu bạn có trình biên dịch C++ 11. Dưới đây là cách hoạt động cho tất cả các phiên bản của C++:

struct matrix_holder { float matrix[2][2]; }; 

class Matrix : matrix_holder 
{ 
    static matrix_holder pack(float a,float b,float c, float d) 
    { 
     matrix_holder h = { {{a, b}, {c, d}} }; 
     return h; 
    } 

public: 
    Matrix(float a,float b,float c, float d) : matrix_holder(pack(a,b,c,d)) 
    { 
    } 
}; 

Trình tối ưu hóa sẽ loại bỏ trình trợ giúp.

1

ma trận [0] [0] = giá trị bạn muốn ma trận [n] [n] = giá trị bạn muốn nhưng đếm theo vòng lặp để ma trận có thể có kích thước động hoặc bạn có thể sử dụng lại mã của mình sau.

for(int ii(0); ii < first dimension size; ++ii) 
{ 
    for(int ll(0); ii < second dimension size; ++ll) 
    { 
    matrix[ii][ll] = value you want; 
    } 
} 

điều này sẽ làm cho mã của bạn dễ mở rộng và hữu ích hơn bên ngoài ứng dụng này và có thể nó không hữu ích hoặc có thể không.