C++ - Почему метод производного класса void m(const T) переопределяет метод базового класса void m(T)?
Случай 1:
class T{};
class A {
public:
virtual void m(T t) { ... }
};
class B : public A {
public:
void m(const T t){ ... }
};
int main(){
T t;
B b;
A* a = &b;
a->m(t);
}
Случай 2:
class T{};
class A {
public:
virtual void m(T& t) { ... }
};
class B : public A {
public:
void m(const T& t){ ... }
};
int main(){
T t;
B b;
A* a = &b;
a->m(t);
}
случай 1: a->m(t) (в основном) вызывает B::m(T) (переопределение)
случай 2: a->m(t) (в основном) вызывает A::m(T) (перегрузка)
Почему T & vs const T & - это несоответствие типов, а T vs const T - нет?