C++ ObjectSlicing(转)

C++语言: Codee#1208001 #include <iostream>
02 #include <string>
03 using namespace std;
04
05 class Pet {
06     string pname;
07 public:
08     Pet(const string& name):pname(name){}
09     virtual string name() const { return pname;}
10     virtual string description() const {
11         return "This is "+ pname;
12     }
13 };
14
15 class Dog:public Pet {
16     string favouriteActivity;
17 public:
18     Dog(const string& name, const string& activity)
19         :Pet(name), favouriteActivity(activity){}
20     string description() const {
21         return Pet::name()+ " likes to " +favouriteActivity;
22     }
23 };
24 //Slices the object,if using void describe(Pet& p), object slicing will not happen.
25 void describe(Pet p){
26     cout << p.description() <<endl; // p is just same as base class
27 }
28
29 int main(){
30     Pet p("Alfred");
31     Dog d("Fluffy", "sleep");
32     describe(p);  //base class
33     describe(d); //object slice
34 }

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

转载于:https://www.cnblogs.com/aquar/archive/2010/07/18/3451415.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值