30/09/2018, 18:29

Hỏi về cách thức nạp chồng toán tử + trong c++

em có đoạn code thế này…
‘’’

     class PhanSo{
        private:
        	int tuSo;
        	int mauSo;
        public:
        	PhanSo(){
        		tuSo = 0;
        		mauSo = 1;
        	}
        	void setPhanSo(int tuSo, int mauSo){
        		this->tuSo = tuSo;
        		this->mauSo = mauSo;
        	}
        	PhanSo operator + (const PhanSo&);
                friend ostream &operator<< (ostream &output, const PhanSo &v){
        		output << v.tuSo << "/" << v.mauSo;
        		return output;
        	}
        };
    int PhanSo::ucln(int a, int b){
    	if (a == 0) return b;
    	return ucln(b % a, a);
    }
    
    PhanSo PhanSo::toigian(PhanSo v){
    	int uc = ucln(v.mauSo, v.tuSo);
    	v.mauSo = v.mauSo / uc;
    	v.tuSo = v.tuSo / uc;
    	return v;
    }
    
    PhanSo PhanSo::operator+ (const PhanSo &v){
    	PhanSo tong;
    	tong.mauSo = this->mauSo * v.mauSo;
    	tong.tuSo = (this->tuSo * v.mauSo + v.tuSo * this->mauSo);
    	tong = toigian(tong);
    	return tong;
    }
int main(){
	PhanSo ps1;
	PhanSo ps2;
	ps1.setPhanSo(5, 3);
	ps2.setPhanSo(7, 5);
	PhanSo ps3;
	ps3 = ps1 + ps2 + ps1 + ps2;
	cout << ps3;
	system("pause");
	return 0;

}

‘’’
em không hiểu tại sao vẫn có thể cộng như thế này dc: ps3 = ps1 + ps2 + ps1 + ps2 em nghĩ nó không dc chứ… vì em trả về 1 biến tạm mà… khi return thì biến tạm bị hủy… thì làm sao có thể cộng vào tiếp dc… theo cách em nghĩ thì nó sẽ cộng từ phải sang trái từng đôi một sau đó gán vào ps3… không biết em nghĩ như vậy là đúng hay sai… mong các anh giúp ạ…

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

Vì hàm nạp chồng có trả về kiểu dữ liệu là chính nó (kiểu PhanSo).
Nó sẽ hoạt động như sau:

1. ps3 = (ps1 + ps2) + ps1 + ps2
ps1 + ps2 trả về kiểu phân số, cứ gọi nó là tổng 1
2. ps3 = ((tổng 1) + ps1) + ps2
phân số tổng 1 + ps1 tiếp tục trả về kiểu phân số, cứ gọi là tổng 2
...

Thế nên suy cho cùng, nó cũng giống

int a = b + c + d + ....
Phan Thành Nam viết 20:37 ngày 30/09/2018

cứ gọi nó là tổng 1

nhưng khi trả về giá trị thì tổng 1 bị hủy rồi… vậy thì kết quả của tổng 1 nó lưu zô biến nào để thực hiện tiếp phép tính tiếp theo ??? vẫn không hiểu lắm…

Bài liên quan
0