您的位置:首页 > 其它

关于对象切片与多态性的认识

2013-09-12 10:11 155 查看
#include <iostream>
#include <string>
using namespace std;

class Pet {
string pname;
public:
Pet(const string& name) : pname(name) {}
virtual string name() const { return pname; }
virtual string description() const {
return "This is " + pname;
}
};

class Dog : public Pet {
string favoriteActivity;
public:
Dog(const string& name, const string& activity)
: Pet(name), favoriteActivity(activity) {}
string description() const {
return Pet::name() + " likes to " +
favoriteActivity;
}
};

void describe(Pet p) { // Slices the object
cout << p.description() << endl;
}
void describe1(Pet& p) { // Slices the object
cout << p.description() << endl;
}
int main() {
Pet p("Alfred");
Dog d("Fluffy", "sleep");
describe(p);
describe(d);
describe1(p);
describe1(d);
Pet p1=d;
cout<<p1.description();
Pet*p2=&d;
cout<<p2->description();
}


输出结果为

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: