C++多态基础(polymorphism)
来源:互联网 发布:华彩软件下载站 编辑:程序博客网 时间:2024/06/15 08:14
记录自己学习c++多态的一些知识点笔记,不全,但是是自己本来并不熟悉的一些地方,简单的地方省略。。。
多态,“一个接口,多种方法”。
1、多态的两种类型
(1)编译时多态
a、函数重载
b、运算符重载
(2)运行时多态
association done during run time.Implemented by dynamic biding.(inheritance + virtual function)
即,通过动态绑定来实现
使用基类指针或者基类引用来访问虚函数来实现的
2、static biding
Done during complie time
Applied to non-vurtual function
It is the compile-time determination of which function to call for a particular object based on the type of the formal parameter.
When pass-by-value is used, static biding occurs.
3、dynamic biding
Done during run time
Applied to virtual function
It is the run-time determination of which function to call for a particular object of a descendant class based on the type of the arguement.
Declaring a member function to be virtual instructs the compiler to generate code that guarantees dynamic biding.
4、virtual function与继承相结合以实现运行时的多态性。在公有继承层次中的一个或多个派生类中对虚函数进行重定义(基类的也可以定义),然后通过指向基类的指针(或引用)调用虚函数来实现运行时的多态性。
5、
eg:
void Fun(class_A & param) { param.memberfun();}
若memberfun非虚,则由形参类型决定调用(静)
若memberfun为虚,则由实参类型决定调用(动)
6、动态绑定的另一实现方式:使用引用形参,通过基类引用调用虚函数
7、关于虚函数
虚函数是在基类中被声明virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态覆盖。
直接在基类中的virtual是会在虚函数中调用子类函数,而这个子类函数在各个派生类中都是具有的
a在派生类中重定义从基类中继承过来的虚(函数原形不变)该重定义的函数在该派生类中仍是虚。(但是在派生类中不用加virtual了)
b函数重载,虚特性丢失
c若派生类没有重新定义虚函数,则使用基类定义的虚函数的版本
8、抽象类:有纯虚函数的类称为抽象类
ps:
1只能用作基类
2不能声明实例
3不能用于传参合返回值类型
4不能用于显示转换
5可以声明关于它的指针和引用
6纯虚函数在基类中没有定义,但要求在任何派生类都要定义自己的实现方法(如果不是纯虚的话,派生类可以不用实现,沿用基类的就好)
7抽象类中的纯虚函数,在派生类的声明中也要加上virtual的定义
写得略微有点凌乱,可能是一种强化版的笔记吧,零基础的同学可能看完了还是不太清楚。。。=_=
备注,学习就好
- C++多态基础(polymorphism)
- Polymorphism in C(用C实现多态)
- Polymorphism in C(用C实现多态)
- Polymorphism in C(用C实现多态)
- polymorphism(多态整理)
- java 中的多态polymorphism
- 类的多态 Polymorphism
- Java基础——最简单的多态(Polymorphism)案例
- Scalaz(2)- 基础篇:随意多态-typeclass, ad-hoc polymorphism
- Java 基础 polymorphism(多态)
- C++.Homework.Polymorphism.01
- C++.Homework.Polymorphism.02
- What is the Polymorphism?(什么是多态)
- 外部多态(External-Polymorphism)
- Polymorphism in JavaScript(javascript中的多态)
- 虚拟函数与多态(Polymorphism)
- 外部多态(External-Polymorphism)
- java中的多态(Polymorphism)
- cvNormalizeHist()函数详解!
- 循环中读取数据库、嵌套循环引起的性能问题
- 【VS开发】C++ opencv Mat基础
- c++第四次作业
- Mybatis实现insert获取自增id
- C++多态基础(polymorphism)
- C++内存管理
- Redis为什么这么快?
- 调用了错误的保存、删除重载方法
- javaBean的概念
- hrbust 1313 火影忍者之~静音【优先队列STL+模拟】
- RS232,RS485波形分析
- 微信开发获取地理位置实例(java,非常详细,附工程源码)
- 树状数组