多态是面向对象的三大特性之一。多态即多种形态,是一个对象变量可以指向多种实际类型的一种现象,同一个事件发生在不同的对象上一般都会产生不同的结果 (例如:动物会叫,如果让猫去叫则会产生“喵喵”声音,让羊去叫则会产生"咩咩"的声音等等)。
多态的三个必要条件:1.有继承关系 ???????? 2.重写 ???????? 3.父类指针指向子类对象。
/*-------------------------------
polymorphism.h
---------------------------------*/
#ifndef POLYMORPHISM_H_
#define POLYMORPHISM_H_
#include<iostream>
//动物类(抽象基类)
class Animal {
protected:
int age; //动物最长寿命(此类不实例化,可将寿命置为0)
public:
Animal(int);
virtual void sound()const = 0; //打印动物发出的声音
virtual void isBig()const = 0; //打印动物体型大小
virtual void lifespan()const = 0; //打印动物寿命
};
//羊类
class Sheep :public Animal {
public:
Sheep();
virtual void sound()const;
virtual void isBig()const;
virtual void lifespan()const;
};
//猫类
class Cat :public Animal {
public:
Cat();
virtual void sound()const;
virtual void isBig()const;
virtual void lifespan()const;
};
#endif
#include"polymorphism.h"
Animal::Animal(int a = 0) {
age = a;
}
//羊类的成员方法
Sheep::Sheep() :Animal(13) {
std::cout << "羊:\n";
}
void Sheep::sound()const {
std::cout << "叫声:咩......" << std::endl;
}
void Sheep::isBig() const {
std::cout << "羊的体型通常较大\n";
}
void Sheep::lifespan()const {
std::cout << "羊的最长寿命大约" << age << "年\n\n";
}
//猫类的成员方法
Cat::Cat() :Animal(15) {
std::cout << "猫:\n";
}
void Cat::sound()const {
std::cout << "叫声:喵......" << std::endl;
}
void Cat::isBig() const {
std::cout << "猫的体型通常较小\n";
}
void Cat::lifespan()const {
std::cout << "猫的最长寿命大约" << age << "年\n\n";
}
#include"polymorphism.h"
int main() {
/*------------------------------------------------
1.Animal类与Sheep类,Cat类之间存在继承关系
2.有方法重写
3.Animal类型的指针分别指向了sheep对象和cat对象
-------------------------------------------------*/
Animal* a;
Sheep sheep;
a = &sheep; //Animal类型的指针指向sheep对象
a->sound();
a->isBig();
a->lifespan();
Cat cat;
a = &cat; //Animal类型的指针指向cat对象
a->sound();
a->isBig();
a->lifespan();
}
结果:
羊: 叫声:咩...... 羊的体型通常较大 羊的最长寿命大约13年
猫: 叫声:喵...... 猫的体型通常较小 猫的最长寿命大约15年
请按任意键继续. . .
|