
自行设计一个具有实用功能的小程序,使用C++实现,最好体现类的封装,继承和多态性,在代码中注明程序的功
展开全部
// 封装:
// 隐藏实现
// 也就是看不到这些功能是如何实现的
class Animal {
public:
virtual void eat(char* food) = 0;
virtual void sleep() = 0;
};
// 继承:
class Dog : public Animal {
public:
virtual void eat(char* food) {
cout << "dog eat " << food << endl;
}
virtual void sleep() {
cout << "dog sleep" << endl;
}
void bark() {
cout << "dog bark" << endl;
}
};
// 继承
class Fish : public Animal {
public:
virtual void eat(char* food) {
cout << "fish eat " << food << endl;
}
virtual void sleep() {
cout << "fish sleep" << endl;
}
void swim() {
cout << "fish swim" << endl;
}
}
// 多态:
// 表面上 dog 的类型变成了 Animal
void foo() {
Dog dog = new Dog();
Animal animal = dog;
dog.eat("bone"); // 正确
dog.bark(); // 正确
animal.eat("bone"); // 正确
animal.bark(); // 编译错误
((Dog)animal).bark(); // 正确
((Fish)animal).sleep(); // 编译通过,运行错误
((Fish)animal).swim(); // 编译通过,运行错误
}
// 隐藏实现
// 也就是看不到这些功能是如何实现的
class Animal {
public:
virtual void eat(char* food) = 0;
virtual void sleep() = 0;
};
// 继承:
class Dog : public Animal {
public:
virtual void eat(char* food) {
cout << "dog eat " << food << endl;
}
virtual void sleep() {
cout << "dog sleep" << endl;
}
void bark() {
cout << "dog bark" << endl;
}
};
// 继承
class Fish : public Animal {
public:
virtual void eat(char* food) {
cout << "fish eat " << food << endl;
}
virtual void sleep() {
cout << "fish sleep" << endl;
}
void swim() {
cout << "fish swim" << endl;
}
}
// 多态:
// 表面上 dog 的类型变成了 Animal
void foo() {
Dog dog = new Dog();
Animal animal = dog;
dog.eat("bone"); // 正确
dog.bark(); // 正确
animal.eat("bone"); // 正确
animal.bark(); // 编译错误
((Dog)animal).bark(); // 正确
((Fish)animal).sleep(); // 编译通过,运行错误
((Fish)animal).swim(); // 编译通过,运行错误
}
追问
这个是原封不动粘过来的吧,亲,我也见这个了,对程序代码的解释不太好吖,而且是干嘛的程序啊
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询