函数调用父类方法而不是子类?

时间:2015-02-16 03:23:07

标签: c++ c++11

我试着弄清楚这里发生了什么,我不知道。请帮忙。

class A
{
protected:
    string name;
public:
    A(string a) {name = a;}
    virtual string getName() {return "A name: " + name;}
};


class B: public A
{
public:
    using A::A;
    string getName() {return "B name: " + name;}
};


void print_name(A obj)
{
    cout << obj.getName() << endl;
}


int main()
{

    A a("a");
    B b("b");

    print_name(a);
    // "A name: a"

    print_name(b);
    // "A name: b"  why not "B name: b"????

    return 0;
}

为什么第二次调用print_name(b);给&#34;一个名字:b&#34;。这意味着执行A类中的getName(),但它应该来自B类?我让方法变得虚拟。

1 个答案:

答案 0 :(得分:2)

说你有:class B : public intint是否属于此类的实例?显然不是。

现在考虑:

class B: public A
...
void print_name(A obj)

print_name函数的值为AA的{​​{1}}的B的实例吗?再一次,没有。

也许你想要:

void print_name(A& obj)

A的引用可以是B