繁体   English   中英

多态性 C++:将子 object 按值传递给接受父 ZA8CFDE6331BD59EB2AC96F891 的 function

[英]Polymorphism C++: Passing child object by value to function that accepts parent object

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

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,即来自子 class 的 x 值。 有人可以帮我理解发生了什么吗?

虽然将b传递给foo将涉及object 切片,但这不会影响foo看到的bx的值,因为它是在构建 object 时设置的。 您只是被 切掉by ,这对编写的代码没有影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM