17多态性·编译时的多态性√同一类的不同对象或同一对象在不同环境下调用同名成员函数,所完成的功能不同。√可以通过函数重载和运算符重载来实现的。运行时的多态性:√属于同一基类的不同派生类对象,在形式上调用基类的同一成员函数,而实际上调用的是各自派生类的同名成员函数。√通过类继承关系和虚函数来实现
• 编译时的多态性: ✓ 同一类的不同对象或同一对象在不同环境下 调用同名成员函数,所完成的功能不同。 ✓ 可以通过函数重载和运算符重载来实现的。 • 运行时的多态性: ✓ 属于同一基类的不同派生类对象,在形式上 调用基类的同一成员函数,而实际上调用的 是各自派生类的同名成员函数。 ✓ 通过类继承关系和虚函数来实现
17多态性重载多态:函数重载。专用强制转换多态:不同类型的数据类型进多态编多运多严译时行混合运算时要进行的态行态格和时的划强制类型转换。包含多态:指在基类及其派生类族中同名函数的不同函数实现,及分通用其在运行时的不同响应。多态参数多态:采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型
重载多态:函数重载。 强制转换多态:不同类型的数据类型进 行混合运算时要进行的 强制类型转换。 包含多态:指在基类及其派生类族中同 名函数的不同函数实现,及 其在运行时的不同响应。 编译时 多态和 运行时 多态的 严格划 分 专用 多态 参数多态:采用参数化模板,通过给出 不同的类型参数,使得一个 结构有多种类型。 通用 多态
17.1派生类对象替换原则C++运行时的多态性机制,需要了解派生类对象替代基类对象的原则公有派生类全面继承了基类的成员和它们的访问权限。所以,公有派生类对象可以替代基类对象做本来由基类对象所做的事情派生类对象对基类对象的替换原则是:凡是基类对象出现的场合都可以用公有派生类对象取代
• C++运行时的多态性机制,需要了解派生类对象 替代基类对象的原则。 • 公有派生类全面继承了基类的成员和它们的访 问权限。 • 所以,公有派生类对象可以替代基类对象做本 来由基类对象所做的事情。 • 派生类对象对基类对象的替换原则是: 凡是基类对象出现的场合都可以用公有派生类对象取代
17.1派生类对象替换原则对象替换常用的形式:/(1)派生类对象给基类对象赋值(2)派生类对象可以初始化基类对象的引用7(3)可以令基类对象的指针指向派生类对象,即将派生类对象的地址传递给基类指针。注:派生类对象替换基类对象后,只能当作基类对象使用。例17-1
• 对象替换常用的形式: ✓ (1)派生类对象给基类对象赋值。 ✓ (2)派生类对象可以初始化基类对象的引用 ✓ (3)可以令基类对象的指针指向派生类对象,即将 派生类对象的地址传递给基类指针。 注:派生类对象替换基类对象后,只能当作基类对象使 用。 例17-1
例17-1classPet//宠物( public:void speak() cout<<" How does a pet speak ?"; }3;class Cat : public Pet( public:void speak(){ cout<<"miao!miao!"; )3;classDog : public Pet( public:void speak() ( cout<<"wang!wang!"; )3;
class Pet //宠物 { public: void speak() { cout<< " How does a pet speak ? "; }; }; class Cat : public Pet { public: void speak() { cout<< "miao!miao!"; } }; class Dog : public Pet { public: void speak() { cout<< "wang!wang!"; } };