Nó không bị gắn cờ là lỗi vì nó không phải là lỗi. Không có gì nói rằng bạn không thể có các thành viên trong một lớp dẫn xuất được đặt tên giống như các thành viên trong một lớp cơ sở.
Nếu bạn có một đối tượng obj
loại Derived
, thì obj.m_Pants
đề cập đến m_Pants
trong Derived
. Nếu bạn muốn tham khảo thành viên cơ sở, bạn có thể làm như vậy bằng cách sử dụng obj.Base::m_Pants
.
Nếu bạn đang ở trong một hàm thành viên của Base
hoặc có một Base*
trỏ đến một đối tượng kiểu Derived
, sau đó m_Pants
luôn đề cập đến thành viên của Base
, bởi vì trong những bối cảnh không có kiến thức của lớp Derived
và nó các thành viên.
Vâng, đó không phải là lỗi mã; nó gần như chắc chắn là một lỗi thiết kế.
Nguồn
2010-05-05 01:00:11
Chức năng có thể bị quá tải và ghi đè. Thành viên không thể. 'Derived :: m_pants' và' Base :: m_pants' là hai biến hoàn toàn khác nhau. Nếu bạn sử dụng 'std :: cout << sizeof (Base) << '' << sizeof (có nguồn gốc) << std :: endl;' trong một chương trình thử nghiệm nhỏ, bạn sẽ thấy rằng 'Derived' có kích thước lớn hơn 'Base'. Bạn thậm chí có thể làm cho các biến sử dụng cùng tên và loại, nhưng chúng vẫn là các biến khác nhau vì chúng thuộc về các lớp khác nhau. – Dustin
Ah, bạn đã thay đổi cụm từ bạn đã sử dụng từ "ghi đè" thành "bóng", do đó làm mất hiệu lực nhận xét của tôi. Cảm ơn bạn đã sửa chữa nó. :) – Dustin
@Dustin, cảm ơn bạn đã cải thiện thuật ngữ của tôi. –