对虚函数的初步理解

来源:互联网 发布:csol由于网络设定问题 编辑:程序博客网 时间:2024/05/19 18:42

 以上今天的学习总结,欢迎大家指点,新手学习中......

在某基类中声明为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(){}

};


#include<iostream>
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();

    return 0;
}

结果:4

            4

            1

            4

说明:指向基类的指针在操作他的多态类的对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。

多重混合继承:  虚基类:

当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),

若只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。

虚函数基类:一个类被虚拟继承.在继承方式前virtual;

                    保证派生类虚基类只有一份拷贝;

                    在派生类构造函数中需要直接调用虚基类(不管是否是直接基类)构造函数(隐式或者显式:构造函数带参);

                    虚基类的构造函数优先调用。

                   

0 0