对象切割和虚函数
class Base{
public:
virtual f1();
f2();
};
class Derived:public Base{
f1();
};
Base b;
Derived d;
void gg(const Base& item) ///引用传递
{
item.f1(); ///调用虚函数
}
void hh(const Base& item)///引用传递
{
item.f2(); ///调用非虚函数
}
void kk(Base item) ///非引用传递
{
item.f1();
}
对于上述代码 当给函数hh()传一个派生类对象时不会发生对象切割 但是hh()调用的是非虚函数
给kk()传一个派生类对象时会发生对象切割
但是切不切割对于上述两个函数来说得到结果会是相同的
因此我的问题是:是不是只有在涉及到虚函数调用时(就像函数gg() )讨论发不发生对象切割才有意义 否则的话(不涉及到虚函数) 对象切不切割得到结果都是相同的???
[解决办法]
非虚函数的话,基类指针调用到的还是基类的方法,不会接触到派生类的内容,当然是否切割就没有影响了啊