c++ - 多态 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 值。有人可以帮我理解发生了什么吗?
解决方案
尽管传递b
tofoo
将涉及对象切片,但这不会影响b.x
as seen by的值,foo
因为它是在构造对象时设置的。您刚刚切片b.y
,这对编写的代码没有影响。
推荐阅读
- swift - 字典作为 Array 的通用元素
- service-worker - 获取服务人员
- php - 部分文件更改了 PhpStorm 背景颜色
- composer-php - Drupal Composer 需求无法解析为一组可安装的包
- python - sudo -H pip install 和 pip --user install 的区别
- c# - ASP.NET Core 2.1 Web API - ConfigurationManager.ConnectionStrings 返回 null
- swift - Eureka - DateRow 加载日期而不更改其当前值
- java - 从 Oracle JDK 迁移到 OpenJDK
- python - 嵌套的 dict 键被覆盖
- javascript - 本地存储中 >100Mb 的数据