30/09/2018, 17:26
Tại sao dùng * khi ép kiểu static_cast?
Chào mọi người em đọc sách thì có chộ này khó hiểu mong mọi người giúp đỡ
chỉ có 1 dòng code thôi .
istream& operator >> (istream &is, SinhVienTre &x)
{
SinhVien *cha = static_cast<SinhVien *> x
return is;
}
cho em hỏi sao nó phải có * ở SinhVien Cha thế anh biết rằng SinhVienTre kế thừa SinhVien
cái * đó có ý nghĩa thế nào
Học
Bài liên quan





Có 1 cái em thắc mắc nữa là em ghi
thì chương trình vẫn chạy đúng trong khi
x : Kiểu dữ liệu là SinhVienTre.
cha : có kiểu dữ liệu là SinhVien
em học bên C/C++ thì biết rằng kiểu dữ liệu khác nhau thì ko thể trỏ được lạ quá giúp em hiểu thêm nhé mọi người em đang học OOP
Cảm ơn mọi người
Dấu
*dùng để khai báo con trỏ. Ở đây biếnchalà con trỏ kiểuSinhVienstatic_castdùng để ép kiểu. Ở trong ví dụ của em, ta sẽ ép kiểuSinhVienTrevềSinhVien.Bởi vì
xcó kiểuSinhVienTre, và kiểuSinhVienTrekế thừa từSinhVien.SinhVien *cha = &x;có thể gọi các phương thức củaSinhVien, nhưng nếuchagọi các phương thức khai báo trongSinhVienTrethì sẽ không gọi được.Cảm ơn anh @ltd nhiều
em đã hiểu được 1 phần còn chỗ lại tại sao lại bắt buộc phải có
*nó có ý nghĩa gì không anh , sao em ko dùng dấu*thì lại không đượcphải dùng con trỏ vì khi nhập thèn con mượn nhập của thèn cha nên phải dùng con trỏ hoặc tham chiếu
Cha &cha = static_cast < cha & > (x);
ép kiểu static_cast con thành kiểu cha rồi gọi lại operator Nhập của lớp cha
Subclass có thể gán được cho superclass, nhưng chiều ngược lại là lỗi.
Cha &cha = static_cast < char &> (con)