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

Thai Hoc Nguyen viết 19:41 ngày 30/09/2018

Có 1 cái em thắc mắc nữa là em ghi

SinhVien *cha = &x;

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

Mai Anh Dũng viết 19:37 ngày 30/09/2018

Dấu * dùng để khai báo con trỏ. Ở đây biến cha là con trỏ kiểu SinhVien

SinhVien *cha;

static_cast dùng để ép kiểu. Ở trong ví dụ của em, ta sẽ ép kiểu SinhVienTre về SinhVien.


Bởi vì x có kiểu SinhVienTre, và kiểu SinhVienTre kế thừa từ SinhVien.

SinhVien *cha = &x; có thể gọi các phương thức của SinhVien, nhưng nếu cha gọi các phương thức khai báo trong SinhVienTre thì sẽ không gọi được.

Thai Hoc Nguyen viết 19:39 ngày 30/09/2018

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 được

tranhuuhongson viết 19:26 ngày 30/09/2018

phả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

rogp10 viết 19:41 ngày 30/09/2018

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

Subclass có thể gán được cho superclass, nhưng chiều ngược lại là lỗi.

tranhuuhongson viết 19:38 ngày 30/09/2018

Cha &cha = static_cast < char &> (con)

Bài liên quan
0