聊聊C++的多态
2016-04-21 00:02
260 查看
什么是多态
如果有几个上似而不完全相同的对象,有时人们要求在向它们发出同一个消息 时, 它们的反应各不相同,分别执行不同的操作。这种情况就是多态现象。
例如:武大女神,北大女神,人大女神,她们都有相同属性和行为,她们正分别和男友一起在清华大学的小树林学习.突然她们的男友同时叫:老婆,你快过来..她们会分别走到不同的男友面前.而不是你…
赋值兼容(多态实现的前提)
赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的 对象来替代。赋值兼容是一种默认行为,不需要任何的显示的转化步骤。
赋值兼容规则中所指的替代包括以下的情况:
︎1.派生类的对象可以赋值给基类对象.
2.派生类的对象可以初始化基类的引用。
3.派生类对象的地址可以赋给指向基类的指针。
在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。
如果有几个上似而不完全相同的对象,有时人们要求在向它们发出同一个消息 时, 它们的反应各不相同,分别执行不同的操作。这种情况就是多态现象。
例如:武大女神,北大女神,人大女神,她们都有相同属性和行为,她们正分别和男友一起在清华大学的小树林学习.突然她们的男友同时叫:老婆,你快过来..她们会分别走到不同的男友面前.而不是你…
C++中所谓的多态(polymorphism)是指,由继承而产生的相关的不同的类,其对象 对同一消息会作出不同的响应。 多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。可以减轻 系统 升级,维护,调试的工作量和复杂度.
赋值兼容(多态实现的前提)
赋值兼容规则是指在需要基类对象的任何地方都可以使用公有派生类的 对象来替代。赋值兼容是一种默认行为,不需要任何的显示的转化步骤。
赋值兼容规则中所指的替代包括以下的情况:
︎1.派生类的对象可以赋值给基类对象.
2.派生类的对象可以初始化基类的引用。
3.派生类对象的地址可以赋给指向基类的指针。
在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。
#include <iostream> using namespace std; class Parent { public: Parent(int a) { this-‐>a = a; cout<<"Parent a"<<a<<endl; } void print() //⼦子类的和⽗父类的函数名字⼀一样 { cout<<"Parent 打印 a:"<<a<<endl; } private: int a; }; class Child:publicParent { public: Child(int b) :Parent(10) { this-‐>b=b; cout<<"Child b"<<b<<endl; } void print() { cout<<"Child打印 b:"<<b<<endl; } private: int b; }; void howToPrint(Parent *base) { base-‐>print(); //⼀一种调⽤用语句 有多种表现形态... } void howToPrint2(Parent &base) { base.print(); } int main(void) { Parent*base=NULL; Parent p1(20); Child c1(30); base =&p1; base-‐>print(); //执⾏行⽗父类的打印函数 base= &c1; /* 编译器认为最安全的做法是编译到⽗父类的print函数, 因为⽗父类和⼦子类肯定都有相同的print函数。 */ base-‐>print(); //执⾏行谁的函数 ? //貌似我们希望之星Child的print函数 Parent &base2= p1; base2.print(); //执⾏行⽗父类的打印函数 Parent &base3 = c1; base3.print(); //执⾏行谁的函数? //函数调用 howToPrint(&p1); howToPrint(&c1); howToPrint2(p1); howToPrint2(c1); return 0; }
相关文章推荐
- C++赋值重载的小窍门
- 递归实现2~9进制转换
- C++中map<int,vector<int>>的初始化和访问方法
- C++作业-3
- C++异常what()函数重写
- C++第4次实验剩余项目选做(非实验博客和作业博客)
- leetcode笔记:Maximal Square
- c++中的 extern "C"
- C++函数对象-谓词
- 经典排序算法之快速排序(C语言版)
- 一道笔试题:字符串变形
- C++语言中的引用的使用方法
- 使用OC调用C语言的函数
- C++/ C循环语句的效率问题
- c++第四次上机-6
- Effective C++ -- Item 1: View c++ as a federation of languages
- 南京理工大学第八届程序设计大赛(校外镜像) C count_prime
- VSVC2010中常用的C++11特性
- VSVC2010中常用的C++11特性
- C 语言 特点