Chào anh chị em và các bạn trên diễn đàn, em mới học C++ , anh giảng viên có cho 1 ví dụ về cách sử dụng con trỏ this mà em nghĩ mãi vẫn chưa thực sự hiểu nên em muốn mọi người giúp em hiểu rõ bản chất của nó ạ .
Em muốn hỏi là :
-
Thứ nhất, ở Phương thức RutGon , khi không sử dụng con trỏ this để thực thi phương thức RutGon mà anh gv lại tạo 1 đối tượng ps , sau đó làm việc trên đối tượng ps đó. Thì khi return ps;
anh ấy giảng đoạn này là Giá trị của this->TuSo và this->MauSo không hề thay đổi .
Và khi xuống dưới hàm main , để có thể sử dụng hàm RutGon và hàm Xuat và rút gọn đi giá trị được nhập vào từ hàm nhập thì phải tạo thêm 1 đối tượng ps2 để nhận cái return ps; của hàm RutGon trên kia thì code mới chạy
em chưa hiểu cái đoạn return ps và xuống dưới tạo thêm ps2 để đón giá trị ps được return ạ
và em muốn hỏi là ở phương thức RutGon thì return ps; là trả về cái gì ạ ? ( anh gv nói là trả về 1 cái đã thay đổi giá trị sau khi được rút gọn , nhưng " cái đó " là cái gì ạ ?)
nếu đã trả về cái đã được thay đổi giá trị sau khi rút gọn tử số và mẫu số thì tại sao lại phải sử dụng ps2 ở hàm main ạ ??? -
em muốn hỏi câu lệnh này có nghĩa gì ạ : a = abs(ps.TuSo);
em biết là em hỏi khá rắc rối vì thực sự em thấy đoạn ps và ps2 phức tạp quá ạ , nhưung mong mọi người giúp em , không hiểu được chắc đêm nay em mất ngủ :(((
đây là code ạ
#include <iostream>
using namespace std;
// Con trỏ this
// Con trỏ this tham chiếu đến đối tượng đang gọi hàm thành phần
class PhanSo{
int TuSo, MauSo;
public:
PhanSo RutGon();
void Nhap();
void Xuat();
};
// Cách dùng thứ 1 của Con trỏ this : trỏ(tham chiếu) đến các thành phần của class hiện tại
void PhanSo::Nhap(){
cout<<"\n Nhap tu so : ";
//cin>>TuSo;
cin>>this->TuSo;
cout<<"\n Nhap mau so : ";
//cin>>MauSo;
cin>>this->MauSo;
}
void PhanSo::Xuat(){
cout<<this->TuSo<<"/"<<this->MauSo;
}
// Không dùng This nữa mà tạo đối tượng PS
PhanSo PhanSo::RutGon(){
int a,b;
PhanSo ps;
ps.TuSo=this->TuSo;
ps.MauSo=this->MauSo;
//Hàm tìm UCLN thông thường
a = abs(ps.TuSo);
b = abs(ps.MauSo);
while(a!=b){
if(a>b){
a=a-b;
}
else{
b=b-a;
}
}
ps.TuSo=TuSo/a;
ps.MauSo=MauSo/a;
// Giá trị của this->TuSo và this->MauSo không hề thay đổi
return ps; // Trả về giá trị của cái Class hiện tại
}
int main(){
PhanSo ps,ps2;
ps.Nhap();
ps2=ps.RutGon(); // ps.TuSo và ps.MauSo không hề thay đổi, chỉ trả về 1 ps đã thay đổi
//ps hoàn toàn không thay đổi
ps2.Xuat();
return 0;
}