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

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

最佳答案

假设您有:class B : public intint 是否有作为此类实例的任何?显然不是。

现在考虑:

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

print_name 函数的值是 AAvalue 是否是 B 的实例?再一次,不。

也许你想要:

void print_name(A& obj)

A 的引用可以是 B

关于c++ - 函数调用父类方法而不是子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28534089/

相关文章:

c++ - 如何禁用 Qt 中 QTreeWidget 上的拖动突出显示?

c++ - 如何使用 C++ 解析带有 ParameterName 和 ParameterValue 的 XML

c++ - 递归构造 unsigned int 的可变参数模板

c++ - 链内是什么意思?

multithreading - C++11 使用共享缓冲区创建快速且周期性的通信线程以减慢主处理循环

c++ - 复制构造函数双向链表中的段错误

java - jfieldID 对于对象无效

c++ - int 数组但索引是字符?

c++ - C 枚举在 C++ 中无法识别

c++ - 表示 "something callable with particular signature"的模板参数