zoukankan      html  css  js  c++  java
  • C++ virtual descructor

    【代码1】

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    /*
        version: 1.0
        author: hellogiser
        blog: http://www.cnblogs.com/hellogiser
        date: 2014/9/22
    */


    #include "stdafx.h"
    #include "iostream"
    #include <assert.h>
    using namespace std;

    void print(const char *str)
    {
        cout << str << endl;
    }

    class A
    {
    public:
        A()
        {
            p();
        }
        
    virtual void p()
        {
            print(
    "A");
        }
        
    virtual ~A()
        {
            p();
        }
    };

    class B: public A
    {
    public:
        B()
        {
            p();
        }
        
    void p()
        {
            print(
    "B");
        }
        ~B()
        {
            p();
        }
    };

    int main(intchar **)
    {
        A *a = 
    new B();
        
    delete a;
    }

    /*
    A
    B
    B
    A
    */

    如果A类的析构函数去掉virtual呢?

    【代码2】

     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    /*
        version: 1.0
        author: hellogiser
        blog: http://www.cnblogs.com/hellogiser
        date: 2014/9/22
    */


    #include "stdafx.h"
    #include "iostream"
    #include <assert.h>
    using namespace std;

    void print(const char *str)
    {
        cout << str << endl;
    }

    class A
    {
    public:
        A()
        {
            p();
        }
        
    virtual void p()
        {
            print(
    "A");
        }
        ~A()
        {
            p();   
    // remove virtual
        }
    };

    class B: public A
    {
    public:
        B()
        {
            p();
        }
        
    void p()
        {
            print(
    "B");
        }
        ~B()
        {
            p();
        }
    };

    int main(intchar **)
    {
        A *a = 
    new B();
        
    delete a;
    }

    /*
    A
    B
    A
    */

    个人学习笔记,欢迎拍砖!---by hellogiser

    Author: hellogiser
    Warning: 本文版权归作者和博客园共有,欢迎转载,但请保留此段声明,且在文章页面明显位置给出原文连接。Thanks!
    Me: 如果觉得本文对你有帮助的话,那么【推荐】给大家吧,希望今后能够为大家带来更好的技术文章!敬请【关注】
  • 相关阅读:
    第八次作业
    设计一款给爸爸妈妈用的手机
    第五次作业
    第四次作业(项目分析)
    第二次作业(个人项目实践)
    即时通讯软件的发展演变
    C++用法的学习心得
    JavaScript(变量、作用域和内存问题)
    一、Java和JavaScript
    使用Hyper-V创建虚拟机
  • 原文地址:https://www.cnblogs.com/hellogiser/p/cplusplus-virtual-destructor.html
Copyright © 2011-2022 走看看