virtual 关键字中 cv限定符的使用

对于如下定义:
struct A { virtual int f( ) { return 1; } } a;
struct B: A {
    int f( ) const { return 2; }
    int f( ) volatile { return 3; }
    int f( ) const volatile { return 4; }
} c;
int main(int argc, char *argv[ ]) { A *p=&c; return p->f( ); }
主函数main的返回值是_____:
A.  1								    B.  2
C.  3	        						D.  4

答案是:A
为什么呢,难道不是因为虚函数的原因调用类B中的f()函数吗
原因就是类B中没有重写,是重载了类A中f() 函数
根据cppreference中的定义
virtual 关键字中 cv限定符的使用_第1张图片
由于cv限定符不相同,故不是虚函数的重写

你可能感兴趣的:(c++,c++)