xem xét:Không ghi đè một phương pháp ảo không phải là const ẩn một quá tải const?
#include <iostream>
using namespace std;
struct A {
virtual void f() { cout << "A::f" << endl; }
virtual void f() const { cout << "A::f const" << endl; }
};
struct B : public A {};
struct C : public A {
virtual void f() { cout << "C::f" << endl; }
};
int main()
{
const B b;
b.f(); // prints "A::f const"
const C c;
c.f();
// Compile-time error: passing ‘const C’ as ‘this’ argument of
// ‘virtual void C::f()’ discards qualifiers
}
(. Tôi đang sử dụng GCC)
Vì vậy, có vẻ như phiên bản const của f() được ẩn trong C. Điều này làm cho rất nhiều ý nghĩa đối với tôi, nhưng là nó bắt buộc theo tiêu chuẩn?
"Ảo" là cá trích đỏ. Chúng tôi không gọi bất kỳ 'f' hầu như (thông qua một con trỏ lớp cơ sở hoặc tài liệu tham khảo) ở đây. Tất cả các tra cứu của 'f' tìm ra' f' có nguồn gốc nhiều nhất. – MSalters
Ảo và const không thực sự áp dụng cho câu hỏi, nhưng tôi đã để chúng dưới dạng thẻ vì tôi không thấy nhiều tác hại và không cần phải bao gồm thẻ có liên quan hơn. –
Tôi đồng ý về 'virtual', nhưng' const' là toàn bộ câu hỏi. Ghi đè 'f()' ẩn 'f() const'. – Ari