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

painterflap

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

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); 给“一个名字:b”。这意味着执行了A类的getName(),但它应该是B类的?我将方法设为虚拟。

大卫·施瓦兹(David Schwartz)

假设您有:class B : public int作为此类的实例的an会有任何int吗?显然不是。

现在考虑:

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

print_name函数采用一个A按值。是否有作为的实例的an的任何再次,不。AB

也许您想要:

void print_name(A& obj)

对的引用A可以是B

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章