zoukankan      html  css  js  c++  java
  • 相同类的对象是否共享虚函数表,不同类呢

    实践出真理!

    #include<stdio.h>
    #include<iostream>
    class A{
    public:A();
           virtual~A();
           virtual void fun1(){
               printf("A:fun1");
           }
           virtual void fun2(){
               printf("A:fun2");
           }
    };
    A::A(){}
    A::~A(){
        printf("Delete class A
    ");
    }
    
    class B : public A
    {
    public:B();
           ~B();
           void fun1(){
               printf("A:fun1");
           }
           void fun2(){
               printf("A:fun2");
           }
    };
    
    B::B(){ }
    B::~B(){
        printf("Delete class B
    ");
    }    
    
    
    int main(){
    
        A *a=new B;
        A *a2=new B;
    
        A *a3=new A;
    
        delete a;
        //delete c;
        //delete d;
        return 0;
    }
    View Code

    a,a2的虚函数表地址一样,说明想同类的对象共享虚函数表(这个比较好理解,因为,同一个类,调用的函数都是一样的,虚函数表占用要内存空间,一样类的函数表就没必要另外在占用内存了,共享了就行)

    而a3是不同地址,所以不同类的对象不共享虚函数表

  • 相关阅读:
    Kotlin 学习 (一)
    Spring Boot 学习(一)
    三大特性之继承
    OC中的点语法
    getter和setter
    三大特性之封装
    匿名对象
    对象作为返回值
    对象作为参数的连续传递
    对象作为参数传递
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3454465.html
Copyright © 2011-2022 走看看