Nếu tôi hiểu chính xác, typeid có thể xác định loại thực tế trong đa hình, trong khi typeof không thể. Có phải nó cũng đúng là lợi nhuận của họ được sử dụng cho các mục đích khác nhau: sự trở lại của typeof được sử dụng như là từ khóa loại có thể xác định biến, nhưng sự trở lại của typeid có thể không?Nhận loại biến
Có cách nào để cả hai có được loại thực tế cho đa hình và sử dụng từ khóa trả về làm loại để xác định một biến khác? Tôi hy vọng có được loại lớp dẫn xuất từ một con trỏ trỏ đến lớp cơ sở và định nghĩa một biến hoặc một con trỏ tới lớp dẫn xuất. Một cái gì đó như:
baseclass *p = new derivedclass
typexxx(*p) *pp = dynamic_cast<typexxx(*p) *> (p);
// would like to convert the pointer from pointing to a base class
// to its derived class
Cảm ơn bạn rất nhiều!
Bạn có thể đưa ra ví dụ về TẠI SAO bạn muốn thực hiện việc này không? Điểm chính của một hệ thống phân cấp thừa kế là bạn thường không cần phải biết loại thực tế. –
Chỉ muốn tham khảo một số thành viên được xác định trong lớp dẫn xuất chứ không phải trong lớp cơ sở. Tôi không chắc là nên thêm các hàm thành viên vào lớp cơ sở có cùng tên với lớp cơ sở và khai báo chúng là ảo không, vì các hàm thành viên đó quá cụ thể với lớp dẫn xuất cụ thể đó và không bắt buộc trong lớp khác các lớp dẫn xuất, và hàm cơ sở sẽ lớn hơn nếu tôi thêm chúng vào nó. – Tim
OK, bạn có thể làm những gì bạn muốn với dynamic_cast, nhưng bạn sẽ cần phải sử dụng một if-ladder để tạo ra các con trỏ kiểu có nguồn gốc. –