Kính thưa Ngài!cách C++ thực hiện đa hình trong nội bộ?
tôi nên nói với bạn rằng những gì tôi biết và những gì tôi không biết về câu hỏi được hỏi để bạn có thể giải quyết khu vực yếu của sự hiểu biết của tôi.
tôi biết rằng C++ thực hiện đa hình bằng cách sử dụng Vtable là mảng con trỏ mỗi con trỏ trỏ đến hàm ảo của lớp, mỗi lớp trong cấu trúc phân cấp có vtable. bây giờ giả sử tôi có lớp sau
class person
{
char name[20];
public:
person(char* pname)
{
strcpy(name,pname);
}
virtual void show()
{
cout<<"inside person show method, Name: "<<name;
}
};
class teacher:public person
{
int scale;
teacher(char*pname, int s):person(pname)
{
scale=s;
}
void show()
{
cout<<"inside the teacher show method, Scale: "<<scale;
}
};
bây giờ giả sử tôi viết trong chương trình chính
person *ptr;
ptr=new teacher(16,"Zia");
ptr->show();
bây giờ tôi đang nhầm lẫn vào thời điểm này, cuộc gọi sẽ được chuyển tới các chương trình chức năng của lớp cơ sở, bây giờ vì nó là một hàm ảo nên nó inturn gọi hàm approprite. tôi biết tôi sai ở đây. tôi bối rối rằng những gì sẽ là chuỗi các cuộc gọi. Vai trò của Vtable là gì và nó hoạt động như thế nào.
"Tôn trọng Sir"? Nghiêm túc? Nó nên là "Tôn trọng Sir * s *!" vì chúng tôi rất nhiều ...;) Tôi luôn tự hỏi tại sao một số người dùng bắt đầu với kính ngữ, nó hơi cổ xưa. – Spoike
Zia, xin vui lòng tìm hiểu cú pháp Markdown: http://stackoverflow.com/editing-help – avakar
@Zia ur Rahman: có một cái nhìn tại qn http://stackoverflow.com/questions/2092283/how-functions-are-resolved -by-compiler, giải thích khi trình biên dịch thực hiện một cuộc gọi đa hình và khi nó sẽ được gọi trực tiếp .. –