2012-04-20 42 views

Trả lời

25

Mỗi lớp có một hàm tạo. Tuy nhiên ... hàm tạo có thể chấp nhận bất kỳ số lượng và loại đối số nào, kể cả các đối số dựa trên varargin.

Vì vậy, để cung cấp các tùy chọn của một số thứ ba mặc định trong Java bạn có thể viết một cái gì đó như thế này (ví dụ dựa trên java documentation):

public Bicycle(int startCadence, int startSpeed, int startGear) { 
    gear = startGear; 
    cadence = startCadence; 
    speed = startSpeed; 
} 
public Bicycle(int startCadence, int startSpeed) { 
    gear = 1; 
    cadence = startCadence; 
    speed = startSpeed; 
} 

Trong Matlab bạn có thể viết

methods (Access = public) 
    function self = Bicycle(varargin) 
     if nargin>2 
      gear = varargin{3}; 
     else 
      gear = 1; 
     end 
     cadence = varargin{1}; 
     speed = varargin{2};   
    end 
end 
+2

Lưu ý rằng bạn không thể tạo "tự" bên trong câu lệnh if, vì vậy lần đầu tiên bạn gán bất kỳ thứ gì cho "tự" phải đến trước hoặc sau mệnh đề if. – Jonas

+0

đã kết thúc với giải pháp này :) tnx! – bsmca

4

Mỗi lớp chỉ có một nhà xây dựng, và mỗi .m file chỉ có thể chứa một định nghĩa lớp.

Nếu bạn muốn có một lớp với sự khác biệt nhỏ tùy thuộc vào đầu vào, bạn có thể sử dụng các thuộc tính xác định công tắc được nhận dạng bởi các phương thức lớp. Nếu bạn muốn có các lớp khác nhau tùy thuộc vào đầu vào, bạn có thể tạo một hàm generateClass - chức năng sẽ gọi một hoặc một lớp khác được xác định trong các tệp khác nhau. Tất nhiên, nếu các lớp khác nhau này có nhiều phương thức và thuộc tính phổ biến, bạn có thể tạo cả hai lớp con làm lớp con chung.

+0

Bài đăng tốt ... nhưng lưu ý đến áp phích gốc: Hãy thực sự thực sự cẩn thận với sự thừa kế. Nó cung cấp cho bạn rất nhiều dây để treo chính mình với.Không nghỉ mát với nó nếu bạn chỉ muốn để có một hàm khởi tạo mặc định và các hàm tạo khác có thể khởi tạo các biến. Sử dụng varargin để lấy hàm này – learnvst

+0

Cùng một lớp, chỉ là quá trình khởi tạo là khác nhau.Tôi nghĩ tôi sẽ chuyển tất cả các tham số cần thiết để xây dựng một cá thể theo hai cách này. và một tháng tham số lại sẽ xác định cách xây dựng. Bẩn nhưng nhanh chóng .. buồn, giải pháp của tôi đã nhận được rất dễ hiểu .. xấu hổ trên bạn MATLAB! – bsmca

+0

@bsmca: Bạn luôn có thể định nghĩa các phương thức (tĩnh) thực hiện hai cách khác nhau để xây dựng, và sau đó bạn gọi một trong hai phương thức đó từ hàm tạo chung. Chỉ cần đảm bảo rằng bạn chỉ tạo đối tượng trước hoặc sau, nhưng không phải bên trong các phương thức này. – Jonas

2

Các câu trả lời của công việc Pursuit, nhưng một người dùng không quen thuộc với hàm này không thể xem có bao nhiêu đối số là cần thiết hoặc những gì họ đang có. Tôi muốn giới thiệu điều này:

methods (Access = public) 
    function self = Bicycle(startCadence, startSpeed, startGear) 
     if nargin>2 
      gear = startGear; 
     else 
      gear = 1; 
     end 
     cadence = startCadence; 
     speed = startSpeed;   
    end 
end 

Nếu bây giờ bạn có thể nhập "Xe đạp" (và đợi bạn có thể thấy ít nhất ba đối số). 't biết làm thế nào để làm điều này.

+0

Điều đó thực sự có hiệu quả với bạn không? Tôi nhận được một "không đủ đối số đầu vào errror" (MATLAB: minrhs) nếu tôi không cung cấp tất cả các đối số (trên 2014a và b). Điều này dường như làm việc trên "miễn phí" chức năng, nhưng không phải constructors/lớp thành viên. –

Các vấn đề liên quan