【发布时间】:2015-03-10 07:00:29
【问题描述】:
class Pet {
public:
virtual string getDescription() const {
return "This is Pet class";
}
};
class Dog : public Pet {
public:
virtual string getDescription() const {
return "This is Dog class";
}
};
假设我有一个函数,它接受 bas 类类型的参数,如
void describe(Base obj) {
p.getDescription();
}
我在这个函数中传递派生类对象,所以对象将被切片,我们将得到与基类相关的输出。
但是如果我修改这个函数,让它像
void describe(Base& obj) {
p.getDescription();
}
再次传递派生类对象,这次输出将是派生类的。
我不明白按引用传递如何避免对象切片。
【问题讨论】:
-
虽然不完全正确,但引用基本上只是一个花哨的指针。所以当你传递一个引用时,你实际上是传递了一个指向 actual 对象的指针。
-
你真的不只是问切片问题是什么吗?
-
不,我知道对象切片的概念。我通过参考感到困惑,但现在得到了答案:)
-
What is object slicing? 的可能重复项
-
跟引用传递有关..
标签: c++