对象切割和多态

实践是最好的学习方式

例子:

#include <iostream>

using namespace std;

class Shape {

public :

Shape() {};

~Shape() {};

virtual void draw() {

cout<<"Shape draw..."<<endl;

};

};

 

class Rect : public Shape {

public :

Rect() {};

~Rect() {};

virtual void draw() {

cout<<"Rect draw..."<<endl;

  };

virtual void size() {

cout<<"Rect size..."<<endl;

  };

  };

 

int main(int argc, char **argv) 

{

Shape* shp = new Shape();

Rect rect;

*shp = rect; // 对象切割

shp->draw(); // 对应Shape draw函数

 

shp = &rect; // 多态

shp->draw(); // 对应Rect draw函数

return 0;

}

 

我的理解,不知道正确与否?

所谓对象切割:c++为Shape Rect分别为他们的对象分配的空间,Shape的对象在内存中的尺寸小于Rect,即当*shp = rect执行的时候,函数virtual void size() {......}是没有拷贝的,所以就形成了“切割”,而shp = &rect只是指向rect的地址,所以就形成了多态。

转载于:https://my.oschina.net/tonyyang/blog/9948

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值