您的位置:首页 > 其它

对象切片

2013-11-30 13:19 134 查看
当多态的处理对象时,传地址与传值有明显不同,如果使用对象而不是地址或引用进行向上映射,对象会被“切片”



如程序:

#include <iostream>
using namespace std;

class base
{
int i;
public:
base(int I = 0) : i(I){}
virtual int sum() const {return i;}
};

class derived : public base
{
int j;
public:
derived(int I = 0, int J = 0) : base(I), j(J){}
int sum() const
{
return base::sum() + j;
}
};

void call(base b)
{
cout << "sum = " << b.sum() << endl;
}

int main()
{
base b(10);
derived d(10, 17);
call(b);
call(d);

system("pause");
return 1;
}

1. call()接受的只是一个base对象,对call的任何调用都将引起一个与base大小相同的对象压栈并在调用后清除
2. 如果一个base的派生类对象传给call,编译器接受他,但只拷贝这个对象对应于base的部分,切除这个对象的派生类部分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: