C++ truyền đối tượng bằng cách tham chiếu đến hàm tạo
main() { int i = 10, j = 20; swapThemByVal(i, j); cout << i << " " << j << endl; // displays 10 20 swapThemByRef(i, j); cout << i << " " << j << endl; // displays 20 10 ... } void swapThemByVal(int num1, int num2) { int temp = num1; num1 = num2; num2 = temp; } void swapThemByRef(int& num1, int& num2) { int temp = num1; num1 = num2; num2 = temp; } Vấn đề của bạn là bạn không phân biệt giữa các đối tượng bình thường, tham chiếu và con trỏ. Trong Java, mọi thứ đều là một con trỏ, do đó không cần cú pháp khác. Trong C++ có một sự khác biệt lớn Tạo một con trỏ trên heap. (nếu bạn không xóa nó ở cuối phạm vi mà nó được tạo, nó sẽ tiếp tục tồn tại)
Tạo một đối tượng trên ngăn xếp. (bạn có thể xem đây là một biến cục bộ vì ngay sau khi phạm vi kết thúc, đối tượng của bạn sẽ tự động bị xóa)
Đây là một con trỏ trỏ đến bộ nhớ đã được tạo với lệnh gọi trước đó, tôi. e. DHT dht =
Sau đây là tham chiếu đến bộ nhớ được tạo trong cuộc gọi đầu tiên
Bạn thấy cú pháp có khác đúng không?
Thay vào đó, bạn cần truyền một đối tượng, không phải con trỏ, cho rơle và cảm biến. Hoặc bạn thay đổi hàm tạo của mình để lấy con trỏ Tôi là một nhà phát triển Java và hiện tôi đang cố gắng học C++. Tôi rất mới với ngôn ngữ lập trình. Tôi đang cố chuyển các đối tượng tới một hàm tạo mà có vẻ như tôi đang làm sai Một đối tượng tam giác cần chứa các tham chiếu đến 3 đối tượng "Vertex", là các điểm của tam giác Tam giác. h
trong số những người khác. Như bạn có thể thấy, tôi hoàn toàn là người mới bắt đầu học C++. Cảm ơn 6 Feb '11 #1 sử dụng danh sách trình khởi tạo hàm tạo. 11 16786nó nói rằng dòng 2 của tam giác. cpp
06 Feb '11 #2 Tôi biết, nhưng tôi không thể hiểu tại sao. Những gì tôi đang cố gắng làm ở đó là tạo một hàm tạo cho Tam giác lấy ba đối tượng Vertex làm tham số. Tôi thực sự không thấy việc có một hàm tạo mặc định cho một đỉnh có liên quan như thế nào Tôi chọn chỉ cung cấp hàm tạo cho Vertex có tọa độ x,y,z -. Hàm tạo cho Tam giác không cần quan tâm đến điều này, nó chỉ nên chấp nhận bất kỳ ba đối tượng đỉnh nào tôi cung cấp cho nó khi tôi sử dụng nó, bất kể hàm tạo nào được sử dụng để tạo các đối tượng đỉnh. Vậy tại sao nó không làm điều đó? 06 Feb '11 #3 sử dụng danh sách trình khởi tạo hàm tạo. 07 Feb '11 #4 Nếu bạn viết hàm tạo của riêng mình thì hàm tạo mặc định tích hợp sẵn sẽ tồn tại, vì vậy bạn sẽ phải tự viết nó (hàm tạo mặc định) Trân trọng, 9 Feb '11 #5 vâng dã man, tôi nhận ra rằng. Tôi chỉ không hiểu tại sao C++ buộc tôi phải có một hàm tạo mặc định, ngay cả khi tôi chỉ muốn các hàm tạo được tham số hóa. Dù sao, danh sách tham số của newb16 đã làm được điều đó. Không cần hàm tạo mặc định 9 Feb '11 #6 Vì các đỉnh chứa trong lớp Tam giác là các đối tượng thực chứ không phải các tham chiếu nên chúng cần được xây dựng. Vì danh sách trình khởi tạo chạy hàm tạo "trước", nên vấn đề có thể được giải quyết theo cách này vì danh sách sử dụng toán tử xác nhận sẵn có. nhưng nếu sau này bạn muốn trả về một Vector theo giá trị từ một hàm nào đó thì sao?
Vì vậy, nếu bạn dự định có một số hàm như trên, hãy viết hàm tạo mặc định hoặc gán giá trị mặc định cho hàm tạo gán của bạn Trân trọng, 9 Feb '11 #7 Tôi hiểu rôi, cảm ơn bạn Tôi đoán tùy chọn tốt nhất của mình sẽ là chỉ lưu trữ các tham chiếu hoặc con trỏ thay vì các đối tượng, vì tôi muốn chia sẻ các đỉnh giữa các hình tam giác Câu hỏi khác; Có thể trả về một con trỏ tới một đối tượng được tạo trong phần thân của hàm như vậy không?
9 Feb '11 #8 Bạn có thể, nhưng bạn cần tạo đối tượng trên heap chứ không phải trên ngăn xếp như bạn đã làm ở đây vì sau khi gọi hàm, tất cả các biến cục bộ của hàm sẽ bị xóa, vì vậy bạn sẽ trả lại một con trỏ tới một số rác Viết nó như thế này thay vì
Trân trọng, 9 Feb '11 #9 "nếu bạn muốn chia sẻ các tham chiếu giữa các phiên bản của tam giác, hãy lưu ý rằng các thành viên của lớp tham chiếu phải được khởi tạo trong danh sách trình khởi tạo hàm tạo và ofc, sau khi được khởi tạo, chúng không thể được đặt lại để giới thiệu đến một số đối tượng khác thuộc loại của chúng. " Bạn có thể xây dựng? . Nó có đúng không? |