• C++虚表的奇葩用法


    1.在工程A中有个接口类

    
    class Father{
    
        virtual string func1()=0;
    };
    

    2.然后有个继承类

    class Son : public Father{
        virtual string func1(){return "func1";}
    
        //新增一个虚函数
        virtual string func2(){return "func2";}
    };
    

    3.在工程B中需要使用A工程中的Father类的fun2方法.但虚基类中没有声明虚方法怎么办?
    1.在虚基类中增加该声明.(推荐)
    2.(特殊情况不能使用1时)在继承类中将方法定义为虚方法.然后使用的时候动态转换成子类对象.

    class user{
    
        void func(){
           Father* base = .....;//从接口中获得对象指针
           Son * imp = dynamic_cast<Son *>(base);
            imp->func2();//是可以的
        }
    }
    

    这个操作是很骚的. 第二种方案是在第一种方案暂时不能使用的时候使用的.
    如果func2方法不加上virtual的话,编译就会因为链接找不到符号而失败.
    当加上虚方法之后说明实际指向是在运行时定义.
    而实际运行时对象内的虚函数表内是带有该func2的.所以是可行的.
    完美绕过虚基类....

  • 相关阅读:
    PHP获取汉字拼音首字母
    记录,待总结5
    HDU2833 WuKong Floyd
    搜索
    记录,待总结4
    HDU3350 #define is unsafe 栈的应用
    指针与引用的混合使用总结
    多源最短路径 Floyd
    引用总结
    函数返回值总结
  • 原文地址:https://www.cnblogs.com/skyhuangdan/p/12560956.html
Copyright © 2020-2023  润新知