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ếncha
là con trỏ kiểuSinhVien
static_cast
dùng để ép kiểu. Ở trong ví dụ của em, ta sẽ ép kiểuSinhVienTre
vềSinhVien
.Bởi vì
x
có kiểuSinhVienTre
, và kiểuSinhVienTre
kế thừa từSinhVien
.SinhVien *cha = &x;
có thể gọi các phương thức củaSinhVien
, nhưng nếucha
gọi các phương thức khai báo trongSinhVienTre
thì 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)