• c++的虚函数与对象切割


      一道非常基础的题目,请回复下面程序的结果:

    #include <iostream.h>

    class ClassA
    {
    public:
        
    void fun1();
        
    void fun2();
        
    virtual void fun3();
    };

    void ClassA::fun1()
    {
        cout 
    << "ClassA.fun1"<<endl;
    };

    void ClassA::fun2()
    {
        cout 
    << "ClassA.fun2"<<endl;
    };

    void ClassA::fun3()
    {
        cout 
    << "ClassA.fun3"<<endl;
    };


    class ClassB : public ClassA
    {
    public:
        
    void fun1();
        
    void fun2();
        
    virtual void fun3();
    };

    void ClassB::fun3()
    {
        cout 
    << "ClassB.fun3"<<endl;
    };

    class ClassC : public ClassB
    {
    public:
        
    void fun1();
        
    void fun2();
        
    virtual void fun3();
    };

    void ClassC::fun3()
    {
        cout 
    << "ClassC.fun3"<<endl;
    };

    void main()
    {
        ClassA 
    *a[3];
        ClassA a1;
        ClassB b1;
        ClassC c1;


        a1.fun3();
        b1.fun3();
        c1.fun3();

        a[
    0= &a1;
        a[
    1= &b1;
        a[
    2= &c1;
        cout 
    << "virtual function array test" <<endl;
        
    for(int i=0;i<3;i++)
        {
            a[i]
    ->fun3();
        }

        cout 
    << "((ClassA)&b1).fun3():";
        ((ClassA
    *)&b1)->fun3();
        
    //object slicing
        cout << "object slicing"<<endl;
        cout 
    <<"((ClassA)b1).fun3():"
        ((ClassA)b1).fun3();
    }


       如果你知道结果,请回复!以后我再解释virtual function是怎么实现多态的!

    Author:repository
    From:  http://repository.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    汉罗塔问题
    有进度条圆周率计算
    turtle库笔记
    OwnCloud建立属于自己私有的云存储网盘
    HTTP 常见请求状态码
    虚拟机部署Kubernetes集群
    常用文件头(16进制)
    配置LAMP环境
    Linux系统日志
    Java的socket通信与操作系统的SocketAPI关系探究
  • 原文地址:https://www.cnblogs.com/repository/p/1902575.html
Copyright © 2020-2023  润新知