30/09/2018, 18:13

Dùng constructor để gán giá trị và dùng dấu '=' để gán có những điểm giống và khác nhau nào? trong vòng lặp for thì dùng ++i có hiệu quả hơn i++ không?

Thầy mình nói dùng constructor để gán giá trị và dùng dấu ‘=’ để gán có những điểm giống và khác nhau. Mình chỉ thấy điểm giống không thấy điểm khác, có ai thông dùm mình vụ này không?
Thêm nữa là trong vòng lặp for thì dùng ++i có hiệu quả hơn i++ không?
Xin cám ơn các cao nhân

viết 20:19 ngày 30/09/2018

khác ở chỗ ctor là xây nhà mới từ đất trống, còn ‘=’ là đập nhà cũ xây nhà mới. Khác ở chỗ phải đập nhà cũ.

++i và i++ sau khi được trình dịch tối ưu code thì như nhau cả thôi.

huy vo viết 20:16 ngày 30/09/2018

Đập nhà cũ có nghĩa là chuyển sang ô nhớ khác hả bạn? Mình vẫn chưa hiểu rõ lắm, nếu đối tượng ban đầu là null thì constructor và ‘=’ cũng giống nhau thôi mà (phải không ta)?

Minh Hoàng viết 20:29 ngày 30/09/2018

Mình vẫn chưa hiểu rõ lắm, nếu đối tượng ban đầu là null thì constructor và ‘=’ cũng giống nhau thôi mà (phải không ta)?

Nếu đối tượng ban đầu không phải là null thì 2 cái đấy khác nhau. Bạn đã đưa ra một trường hợp cụ thể để thấy sự giống nhau của nó.

huong viết 20:19 ngày 30/09/2018

Hình như dùng copy contructor sẽ khởi tạo một đối tượng mới sau đó gán đối tượng
Còn toán tử gán thì gán đối tượng mà không phải khởi tạo đối tượng.
Nên khi bạn xây dựng toán tử gán thì sẽ không có bước khởi tạo đối tượng (vd như khởi tạo các con trỏ trong lớp) mà sẽ thực hiện gán dữ liệu luôn.
E hiểu sơ qua như thế mong các bác sửa cho

Đầu Méo viết 20:29 ngày 30/09/2018

Theo mình nhớ thì: Constructor thì gán theo dạng địa chỉ. Tức là mỗi giá trị khởi tạo sẽ có 1 ô và ô đó sẽ lưu địa chỉ mà bộ nhớ trỏ tới. Gán đi tức là thây đổi địa chỉ trong ô đó. còn bộ nhớ vẫn còn. Còn “=” thì chỉ có bộ nhớ đó và xóa đi và gán vào. Không biết đúng không nữa. Các bạn góp ý nhé

Le Hoai viết 20:17 ngày 30/09/2018

Tùy vào từng trường hợp của toán tử “=” được định nghĩa như thế nào. Phép gán có thể override (trừ java), nên có thể là clone value, có thể là reference.
Tuy nhiên trong trường hợp default thì khi gán 1 object thì hoàn toàn không có đối tượng nào được khởi tạo mới, chỉ là reference. Còn constructor thì lại khởi tạo mới 1 đối tượng.

huy vo viết 20:17 ngày 30/09/2018

Như vậy là constructor copy là tạo mới đối tượng xong gán đối tượng cũ cho đối tượng vừa new, còn operator = là gán bên phải cho bên trái chứ không tạo mới?

huong viết 20:26 ngày 30/09/2018

Theo đúng tính chất thì khi xây dựng copy contructor và toán tử gán thì là vậy. Như trường hợp đã có 2 đối tượng tồn tại rồi thì xây dựng toán tử gán sao cho chỉ việc gán dữ liệu chứ không cần tạo đối tượng mới. Còn muốn tạo một đối tượng mới theo 1 đối tượng đã có thì bắt buộc phải tạo đối tượng mới rồi (Mình không tính copy contructor mặc định và toán tử gán mặc định vì những lớp mà có con trỏ… thì các hàm mặc định thường làm không đúng theo ý muốn).

Bài liên quan
0