对C++多态的一点理解
2013-08-23 18:15
99 查看
作为一个C++新手,我浅谈一下我对多态的一点理解。
首先,引用几句话:
1、继承是一种抽象,它允许程序员在某些时候忽略相似对象的差异,又在其他时候利用这些差异。——《C++沉思录》
2、继承就是为多态服务的。
3、C++中只有通过指针调用虚函数的时候,才能实现多态。
4、是父类的指针指向子类,而不是反过来。
5、多态有助于实现拓展性和替换性。
接下来看一个例子:
![](C:\Users\songheng\Desktop)
![](http://images.cnitblog.com/blog/407610/201308/23174110-433571c6f0d449958a59f41e0a052f00.png)
假设,父类J最有一个函数(虚函数),名字叫做virtual void Open(“开机”);
子类,D,K,F,X继承了父类J,都拥有了open这个方法,并分别重写这个方法,如下:
电视机:void open(){"开始播放节目"}
风扇:void open(){"开始扇风"}
空调:void open(){"开始制冷"}
洗衣机:void open(){"开始洗衣服"}
实现多态的程序:
J* j = NULL; //声明父类的指针
D d; //子类创建对象
F f; //子类创建对象
K k; //子类创建对象
X x; //子类创建对象
j = &d; //父类的指针指向子类
//通过父类的指针调用子类对象的函数,也可写成 (*j).open();
j ->open(); //调用的是 :{"开始播放节目"}
j = &f; //父类的指针指向子类
j ->open(); //调用的是 :{"开始扇风"}
j = &k; //父类的指针指向子类
j ->open(); //调用的是 :{"开始制冷"}
j = &x; //父类的指针指向子类
j ->open(); //调用的是 :{"开始洗衣服"}
从上面的程序看,同样是j ->open();这么一句话,调用的却是不同的函数,这就是对多态的直观认识!
父类通过其指针指向子类,父类就能调用子类的函数(该函数,是子类继承父类的虚函数而来)。
可能,读者会说,这多态也没有什么优势啊,我用分别子类不是一样可以调用这些函数吗?
那么请读者再,回味一下“多态有助于实现拓展性和替换性。”这句话。
还有“继承是一种抽象,它允许程序员在某些时候忽略相似对象的差异,又在其他时候利用这些差异。”
这句话。
希望您看后也有所感悟!
首先,引用几句话:
1、继承是一种抽象,它允许程序员在某些时候忽略相似对象的差异,又在其他时候利用这些差异。——《C++沉思录》
2、继承就是为多态服务的。
3、C++中只有通过指针调用虚函数的时候,才能实现多态。
4、是父类的指针指向子类,而不是反过来。
5、多态有助于实现拓展性和替换性。
接下来看一个例子:
![](http://images.cnitblog.com/blog/407610/201308/23174110-433571c6f0d449958a59f41e0a052f00.png)
假设,父类J最有一个函数(虚函数),名字叫做virtual void Open(“开机”);
子类,D,K,F,X继承了父类J,都拥有了open这个方法,并分别重写这个方法,如下:
电视机:void open(){"开始播放节目"}
风扇:void open(){"开始扇风"}
空调:void open(){"开始制冷"}
洗衣机:void open(){"开始洗衣服"}
实现多态的程序:
J* j = NULL; //声明父类的指针
D d; //子类创建对象
F f; //子类创建对象
K k; //子类创建对象
X x; //子类创建对象
j = &d; //父类的指针指向子类
//通过父类的指针调用子类对象的函数,也可写成 (*j).open();
j ->open(); //调用的是 :{"开始播放节目"}
j = &f; //父类的指针指向子类
j ->open(); //调用的是 :{"开始扇风"}
j = &k; //父类的指针指向子类
j ->open(); //调用的是 :{"开始制冷"}
j = &x; //父类的指针指向子类
j ->open(); //调用的是 :{"开始洗衣服"}
从上面的程序看,同样是j ->open();这么一句话,调用的却是不同的函数,这就是对多态的直观认识!
父类通过其指针指向子类,父类就能调用子类的函数(该函数,是子类继承父类的虚函数而来)。
可能,读者会说,这多态也没有什么优势啊,我用分别子类不是一样可以调用这些函数吗?
那么请读者再,回味一下“多态有助于实现拓展性和替换性。”这句话。
还有“继承是一种抽象,它允许程序员在某些时候忽略相似对象的差异,又在其他时候利用这些差异。”
这句话。
希望您看后也有所感悟!
相关文章推荐
- c++继承和多态的一点小小的理解
- deep_c++::多态,虚函数的一点理解
- c++ 多态理解
- 关于C++多态的理解
- C++箴言:理解隐式接口和编译期多态
- C++_对多态的理解
- C++中多态的理解
- C++中关于类(封装、继承、多态)区别于结构体的理解
- 关于C++中在函数中按值返回、临时对象、拷贝构造函数的一点理解
- 关于C++多态的理解
- C++多态、接口和虚基类的深入理解
- 关于C++中的cin的一点理解
- 对C++多态的理解
- Builder模式初探,附带多态的一点理解。
- 深入理解C++三大特性之一 ——多态
- 深入理解C++三大特性之一 ——多态
- 关于C++对象模型的一点理解(2)
- 更深入一点理解switch语句及c/c++对const的处理
- 对C++多态性的一点理解
- c++中的重载、覆盖、多态的理解