30/09/2018, 20:32

Ai có thể giải thích giúp em đoạn code này được không ạ?

Xin chào mọi người, hiện em đang học C++ trên trang web sololearn.com, đây là một trang em thấy khá hay và bổ ích, nếu mọi người có thời gian có thể xem qua.

Có điều học đến bài về overload operator thì có đoạn code này em không hiểu lắm:

#include <iostream>

using namespace std;
class myclass
{
public:
    int var;
    myclass(){};
    myclass(int a):var(a){};

myclass operator+(myclass &obj)
{
    myclass res;
    res.var=this->var+obj.var;
    return res;
}
};
int main()
{
    myclass ob1(20),ob2(30);
    myclass res=ob1+ob2;
    cout<<res.var;
    return 0;
}

Em không hiểu là:

  1. Tại sao lại phải có tới 2 constructor>
  2. Dòng operator+ có ý nghĩa gì, tại sao em bỏ nó thì bị lỗi? Ai có thể giải thích cho em sự thay thế giá trị các biến diễn ra như thế nào trong suốt đoạn hàm operator+ đó ko? (cái debug của em bị khùng khùng rồi, hic)
  3. Việc set biến private có ý nghĩa như thế nào? Nếu là để bên ngoài không sử dụng được biến đó thì tại sao còn có thêm từ khóa “friend” để dùng được những biến này?

Em vẫn còn gà mờ lắm, mong mọi người đừng cười nếu em hỏi dở hơi quá ạ, hic.
Em xin cảm ơn.

Khôi Trần viết 22:36 ngày 30/09/2018

EM hỏi toàn cái cơ bản mà sách vở nào cũng có, từ đó suy ra là học hành không có quy củ
1, khởi tạo tham số vào không tham số, sách nào chả có
2, overload operator+, tức là nạp chồng toán tử cộng cho đối tương myclass , bỏ đi thì sai vì ở dưới gọi res=obj1+obj2, obj1 và 2 là 2 object thì bình thường làm gì có phép + mà cộng 2 đối tượn như cộng số nguyên hay thực
3, set private để thằng khác không truy xuất bừa bãi tới nó, friend chỉ cho phép những thằng là bạn của nó mới ó quyền truy xuất vào nó

Phan Hoàng viết 22:42 ngày 30/09/2018
  1. Hai contructor vì default contructor sẽ không được tạo ra khi đã overload 1 constructor với 1 biến private (vì defalt contructor mặc định là rỗng hoặc set đầu vào mặc định cho biến). Giờ gọi new myclass() thì compiler, nếu có giả sử generate ra default contructor thì cũng không biết cần init mặc định cho cái biến a thế nào?

  2. Nạp chồng toán tử: bỏ đi thì compiler không biết + 2 object thế nào.

  3. Friend là từ khóa cho phép class “bạn” được quyền access các prop/func có từ khóa protected.

Lê Trọng Nghĩa viết 22:36 ngày 30/09/2018

Dạ. cho em hỏi thêm là this->var có phải ám chỉ giá trị đang có hiện tại của res ko? Nếu em thay this->var thành res.var thì hiện kết quả sai.

Nguyễn Hải Đăng viết 22:39 ngày 30/09/2018

This là keyword dùng để trỏ đến ông object sở hữu cái method hoặc constructor được gọi.

Khôi Trần viết 22:35 ngày 30/09/2018

khi ban gọi res=obj1+obj 2 thì cái this->var chính là cái var của obj1

Bài liên quan
0