我试图弄清楚这里发生了什么,但我不知道。请帮忙。
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 int
。 int
是否有作为此类实例的任何值?显然不是。
现在考虑:
class B: public A
...
void print_name(A obj)
print_name
函数的值是 A
。 A
的 value 是否是 B
的实例?再一次,不。
也许你想要:
void print_name(A& obj)
对 A
的引用可以是 B
。
关于c++ - 函数调用父类方法而不是子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28534089/