C ++ - 为什么派生类方法void m(const T)覆盖基类方法void m(T)?

时间:2015-11-30 17:26:21

标签: c++ override const overloading name-hiding

案例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)(在main中)调用A :: m(T)(重载)

为什么 T& vs const T& 是类型不匹配但 T vs const T 不是?

0 个答案:

没有答案