虚函数 多重继承无重写(overwrite)

#include <stdio.h>

struct Base1
{
    virtual void func1()
    {
        printf("Base1 func1()\n");
    }
    virtual void func2()
    {
        printf("Base1 func2()\n");
    }

};
struct Base2
{
    virtual void func3()
    {
        printf("Base2 func3()\n");
    }
    virtual void func4()
    {
        printf("Base2 func4()\n");
    }

};

struct Sub:Base1,Base2
{
    virtual void func5()
    {
        printf("Sub func5()\n");
    }
    virtual void func6()
    {
        printf("Sub func6()\n");
    }
};

void test()
{
    int i = 0;
    Sub s;
    typedef void (*pFun)(void);
    pFun fun = NULL;
    for (i = 0; i < 4; i++) {
        fun = (pFun)(*((long int *)(*(long int *)&s) + i));
        fun();
    }
    for (i = 0; i < 2; i++) {
        fun = (pFun)(*((long int *)(*((long int *)&s + 1)) + i));
        fun();
    }
}

int main(int argc, char **argv)
{
    test();
}

时间: 2024-10-09 22:29:16

虚函数 多重继承无重写(overwrite)的相关文章

虚函数 单继承无重写(overwrite)

#include <stdio.h> struct Base{    virtual void func1()    {        printf("Base func1()\n");    }    virtual void func2()    {        printf("Base func2()\n");    }    virtual void func3()    {        printf("Base func3()\n

C++虚函数及虚函数表解析

一.背景知识(一些基本概念) 虚函数(Virtual Function):在基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数.纯虚函数(Pure Virtual Function):基类中没有实现体的虚函数称为纯虚函数(有纯虚函数的基类称为虚基类).C++  “虚函数”的存在是为了实现面向对象中的“多态”,即父类类别的指针(或者引用)指向其子类的实例,然后通过父类的指针(或者引用)调用实际子类的成员函数.通过动态赋值,实现调用不同的子类的成员函数(动态绑定).正是因为这种

C++学习之路:虚函数与多态

summery:主要有以下几个内容 1.多态 2.静态绑定与动态绑定 3.虚函数 4.虚表指针 5.object slicing与虚函数 6.overload override overwrite的区别   @什么是多态性?  #多态是面向对象程序设计的重要特征之一 #多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为 #多态的实现:  $函数重载 $运算符重载 $模板  $虚函数 前三个都属于静态绑定, 虚函数属于动态绑定 tip: {静态绑定}:绑定过程出现在编译阶段,在

虚函数实现原理之虚函数表

引言 C++使用虚函数来实现多态机制,大多数编译器是通过虚函数表来实现动态绑定. 类的内存布局 1.普通类 class B { public: int m; int n; }; int main() { printf("%ld\n", sizeof(B)); B b; printf("%p, %p, %p\n", &b, &b.m, &b.n); return 0; } 类中只有普通成员变量,对象在内存中顺序存储成员变量.输出: 8 0x7f

转载:C++多态性 &amp; C++纯虚函数

C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言.我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握. 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念.多态(polymorphism),字面意思多种形状. C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写.(这里 我觉得要补充,重写的话可

虚函数与多态小览

一.文章来由 Bill又写文章来由了哇~~早就想好好搞清这个问题了,这是c++领域里面比较难搞定的一块知识点,而且最近在看设计模式,里面有涉及这块,之前学过的不用容易玩忘记,于是就干脆研究透一点,也好碰到.用到的时候不心慌~于是有了这篇文章. 二.从编译时和运行时说起 2.1 编译时: 顾名思义就是正在编译的时候.就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字节码,C#中只有CLR能识别的MSIL)

C++之虚函数的原理

1. 看看一个类中如果有虚函数,它的内存布局: class A{ double i; int j; virtual void foo(){} virtual void fun(){} }; 内存布局: 1> class A size(24): 1> +--- 1> 0 | {vfptr} 1> 8 | i 1> 16 | j 1> | <alignment member> (size=4) 1> +--- 可以看出,A中有一个vfptr,这个是指向一个

你好,C++(37)上车的人请买票!6.3.3 用虚函数实现多态

6.3.3  用虚函数实现多态 在理解了面向对象的继承机制之后,我们知道了在大多数情况下派生类是基类的“一种”,就像“学生”是“人”类中的一种一样.既然“学生”是“人”的一种,那么在使用“人”这个概念的时候,这个“人”可以指的是“学生”,而“学生”也可以应用在“人”的场合.比如可以问“教室里有多少人”,实际上问的是“教室里有多少学生”.这种用基类指代派生类的关系反映到C++中,就是基类指针可以指向派生类的对象,而派生类的对象也可以当成基类对象使用.这样的解释对大家来说是不是很抽象呢?没关系,可以

C++中的虚函数解析[The explanation for virtual function of CPlusPlus]

1.什么是虚函数?                                                                                                                                               答:在C++的类中,使用virtual修饰的函数. 例如: virtual void speak() const { std::cout << "Mammal speak!\n&quo