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 - нет?

0 ответов

Другие вопросы по тегам