01/10/2018, 09:56
Gọi method của child class
Chào mọi người!
Mọi người có biết cách nào để sử dụng con trỏ tới base class (pure virtual), có thể gọi method - chỉ khai báo trong child class - không ạ?
VD:
class Base
{
public:
virtual void A(void) = 0;
}
class Child : public Base
{
public:
void A(void) {};
void B(void) {//do st;}
}
Có cách nào con trỏ kiểu A*, có thể gọi hàm B hay không?
Bài liên quan
Muốn gọi hàm số B thì bạn phải có object kiểu Child, làm mọi cách để chuyển về kiểu Child (ép kiểu, v.v.)
Mình đang hỏi cái “v.v.” kia cụ thể như nào bạn ạ! Bạn có thể giúp mình không?
Trình bày cụ thể và viết ngữ pháp rõ ràng vào, đưa code ví dụ chỗ nào mà bạn muốn gọi hàm đó ra (tất nhiên là ngoài 2 class trên). Câu cú của bạn ở post 1 mình chả hiểu tẹo nào.
HI Công Vũ.
Con trỏ lớp nào thì chỉ gọi phương thức của lớp đó thôi. Bạn nuốn gọi phương thức của lớp khác bạn cần ps kiểu nó về kiểu của lớp đó.
VD:
trước hết là bạn format lại code nhìn cho nó sáng sủa nhé.
base class của bạn là pure vitual thì bạn không trỏ đến để dùng được tại vì nó là abstract.
còn nếu bạn muốn dùng con trỏ kiểu Base (con trỏ kiểu Base khác với con trỏ trỏ đến Base nhé) thì có thể ép kiểu cho nó thành kiểu Child thì mới gọi được hàm B. nếu không nó chỉ gọi được hàm A thôi, lý do là vì khi nó là con trỏ kiểu Base, trong Base có hàm ảo A thì nó chỉ “nhìn thấy” hàm A và không biết đến sự tồn tại của hàm B, khi nó trỏ đến vùng nhớ kiểu Child, hàm A được overload và nó gọi được hàm A. Theo những gì mình biết là như vậy.
Mình hiểu r. Cảm ơn mọi người đã giúp đỡ!!!
Để cho chắc ăn thì bạn nên test trước khi cho cast kiểu này.