关于C++多态问题的整理
来源:互联网 发布:正规淘宝代刷平台app 编辑:程序博客网 时间:2024/06/05 10:22
C++的多态我们可以简单的理解为“一个函数,多种方法”,程序在运行时才会被调用的函数。C++的多态性是通过虚函数来实现的,虚函数允许派生类函数重定义成员函数,而派生类重新定义了基类的虚函数的做法叫做重写成员函数,注意:如果要构成多态,我们首先就必须在派生类里面重写虚函数,然后使用基类类型的指针和引用调用虚函数,只有这样我们才能实现多态。
在学习多态这方面的知识时我们最容易弄混淆的就是函数重载、函数的重写、以及函数重定义的区别。
函数重载:首先函数重载是在同一个作用域内进行的,而且函数名不同或者参数不同,如果仅仅只是返回值不同或者函数参数列表的顺序不同这样是不能构成重载的。
下面要区分的是函数的重写,函数的重写要求在不同的作用域,一般是在基类和派生类进行重写的,而且能重写的函数在基类里面必须是虚函数,基类里面必须要有Virtual的关键字,同时函数的函数名相同,参数相同,返回值相同。class A
以上就是一个简单的函数重写,这样我们就可以使用基类的引用或者指针对其进调用。
{
public:
A(int a = 0)
:_a(a)
{}
virtual void Dispiay()
{
cout << "A" << endl;
}
int _a;
};
class B : public A
{
B(int b=0)
:A()
, _b(b)
{}
void Dispiay()
{
cout << "B" << endl;
}
int _b;
};
下面我们做一个简单的总结:
1、派生类重写基类的虚函数实现多态,要求函数名,参数列表,函数值完全相同(协变除外)。
2、基类中定义了虚函数,在派生类中该函数始终保持虚函数的特性。
3、只有基类的非静态成员才能定义为虚函数静态成员不能定义为虚函数。
4、构造函数不能定义为虚函数,只能在声明函数时加上virtual关键字,定义时不用加。
5、构造函数不能定义为虚函数(因为构造函数没有this指针),同理拷贝构造函数也不能定义为虚函数,operator=一般也不要定义为虚函数(operator=函数在一些编译器下规定不能为虚函数,一些编译器下规定operator=函数不能被继承),使用的时候容易混淆。
6、不要在构造函数和解析函数中调用虚函数,在构造函数和析构函数中,对象是不够完整的,可能会出现未定义的行为。
7、最好将基类的解析函数声明为虚函数。
8、虚表是所有类对象公用的。
- 关于C++多态问题的整理
- 关于NaN的问题整理
- 关于Objective-C的入门学习整理
- 关于C++的一些问题的整理
- 关于android的零碎问题的整理
- 关于内存对齐的一些问题整理
- 关于hibernate效率问题讨论的整理
- 关于支付平台的问题整理01
- 关于字符串拆分,合并问题的整理
- 关于JS的一些问题--要整理
- 整理一些关于远程的问题
- 阶段性整理 关于 mianshi 的一些问题
- 关于数据库的面试问题(整理)
- 关于G++编译器选项问题的整理
- 关于springmvc+freemarker问题的整理
- 关于 extern "C" 的问题
- 关于C的 一个问题
- 关于C语言的问题
- mybatis mapper.xml文件里怎么调用静态方法
- 二叉排序树及平衡二叉树的实现
- ACM 逆序数 Lazy Susan
- 格式化信息窗口内容—ArcGIS API for JavaScript
- JDK中常见的线程池类型
- 关于C++多态问题的整理
- selenium————多窗口切换
- MySQL数据库的逻辑备份和物理备份
- matlab直线拟合RANSAC初探
- 微信小程序--(5-1)点击列表item,把item上面显示的所有数据,传递到另外一个页面
- Velocity入门
- caffe make问题
- Angular2笔记(三)--服务与依赖注入
- bosten key party 2017 signed shell server writeup