我试着弄清楚这里发生了什么,我不知道。请帮忙。
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类?我让方法变得虚拟。
答案 0 :(得分:2)
说你有:class B : public int
。 int
的值是否属于此类的实例?显然不是。
现在考虑:
class B: public A
...
void print_name(A obj)
print_name
函数的值为A
。 A
的{{1}}的值是B
的实例吗?再一次,没有。
也许你想要:
void print_name(A& obj)
对A
的引用可以是B
。