对虚函数的初步理解
2016-08-16 00:06
253 查看
以上今天的学习总结,欢迎大家指点,新手学习中......
在某基类中声明为virtual 并在一个或多个派生类中被重新定义的成员函数。
用法格式:virtual 函数返回类型 函数名(参数表){函数体}。
实现了多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。
简单的例子:
#pragma once#include<iostream>
using namespace std;
class CA
{
public:
virtual void fun(){ cout << 1 << endl; }
virtual void fun2(){ cout << 2 << endl; }
CA(){}
~CA(){}
};
class CB :public CA
{
public:
void fun(){ cout << 3 << endl; }
void fun2(){ cout << 4 << endl; }
CB(){}
~CB(){}
};
using namespace std;
#include"B.h"
int main()
{
cout << sizeof(CA) << endl;//因为类中有虚函数存在,所以编译器就会为他们两个分别插入一段你不知道的数据,那段数据叫做vptr指针,所以大小为4
cout << sizeof(CB) << endl;
CA a;
CB b;
CA *p1 = &a;
CA *p2 = &b;
p1->fun();
p2->fun2();
}
结果:4
4
1
4
说明:指向基类的指针在操作他的多态类的对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。
多重混合继承: 虚基类:
当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),
若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。
虚函数基类:一个类被虚拟继承.在继承方式前virtual;
保证派生类虚基类只有一份拷贝;
在派生类构造函数中需要直接调用虚基类(不管是否是直接基类)构造函数(隐式或者显式:构造函数带参);
虚基类的构造函数优先调用。
相关文章推荐
- 对Oracle分析函数的初步理解
- STL中伪函数、函数对象(functor)初步理解(上)
- STL中伪函数、函数对象(functor)初步理解(下)
- Python函数修饰符的初步理解
- 内存映射函数mmap的初步理解
- 回调函数初步理解
- 关于strtok()函数的小小的理解
- js中函数声明和函数表达式,立即执行函数理解(笔记)
- 根据动画原理,初步封装运动函数 2
- 深入理解sizeof()函数
- [前端技术]如何加深对JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
- 浅谈线程知识的初步理解
- 函数调用中堆栈的个人理解
- AJAX入门之深入理解JavaScript中的函数
- 立即执行函数写法理解
- HA规范的理解3 - 初始化函数里的注册回调函数的分析
- 关于ECMAScript函数参数的多方面理解
- 看懂下面C++代码才说你理解了C++多态虚函数!
- glOrtho()函数和glViewport()函数的理解
- PHP 回调函数理解