首页 > 解决方案 > 多态 C++:将子对象按值传递给接受父对象的函数

问题描述

我将一个子对象按值传递给一个接受父对象的函数。我没想到会工作,因为我认为涉及向上转换的多态性仅适用于指针/引用。

class A
{
public:
  int x;
  A() :x{ 5 } {}
};

class B : public A
{
public:
  int y;

  B() :y{ 5 } { x = 10; }
};

void foo(A a)
{
  cout << a.x << endl;
}

int main()
{
  A a;
  B b;

  // it works to send b to foo
  // foo will print value 10
  foo(b);
}

似乎 foo 将打印值 10 ,即来自子类的 x 值。有人可以帮我理解发生了什么吗?

标签: c++ooppolymorphism

解决方案


尽管传递btofoo将涉及对象切片,但这不会影响b.xas seen by的值,foo因为它是在构造对象时设置的。您刚刚切片b.y,这对编写的代码没有影响。


推荐阅读