首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

对象切割跟虚函数

2013-08-04 
对象切割和虚函数class Base{public:virtual f1()f2();}class Derived:public Base{f1()}Base b;Deriv

对象切割和虚函数
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() )讨论发不发生对象切割才有意义 否则的话(不涉及到虚函数) 对象切不切割得到结果都是相同的???
[解决办法]
非虚函数的话,基类指针调用到的还是基类的方法,不会接触到派生类的内容,当然是否切割就没有影响了啊

热点排行