zoukankan      html  css  js  c++  java
  • C++笔记

    1.虚函数

      类包含虚函数,不论一个还是多个,都会有一个隐藏成员 vTable。 Vtable 指向所有虚函数存储得列表。 不使用虚函数声明时,访问函数时,直接调到类函数定义地址,调用函数;函数使用虚函数声明时,会先跳转到Vtable指向函数泪飙,再匹配函数名称获取函数执行地址。概括说:1)非虚函数,调用函数得对象,直接按照挡墙对象得类::成员函数;2)虚函数,类-》原始类虚函数列表地址VTable-》原始类关联函数。 C++ Primer 说到前者是静态编译,效率高。 后者是动态编译,程序执行得时候,才知道跳转到哪个函数(VTable 执行时才有具体值),效率慢。

           这个Vtable似乎是每个对象独立得。因为不能声明static 修饰得函数为vitural 。

    2. 调试时监视变量 和实际变量值不一致;监视结果值和执行不一致;声明和定义,同类型变量,名称互换,监视结果和实际不一致。

      调试代码过程,发现 监视运行结果值和实际执行值不一致。反复测试,都出现。大体代码如下

      

    声明
    
        void GetRefRoi(int height,int width,cv::Rect sourceRoi,cv::Rect& validRoi);
    
    定义
        void GetRefRoi(int width,int height,cv::Rect sourceRoi ,cv::Rect& validRoi)
    {
        cv::Rect processRect ;
        int x = sourceRoi.x ,y = sourceRoi.y , tempWidth = sourceRoi.width , tempHeight = sourceRoi.height;
            processRect.x = y;
            processRect.width = tempHeight;
            processRect.y =width- x -tempWidth; 
         processRect.height
    = tempWidth;
    …… }

      以上代码执行时, processRect.y 数值始终不对。 将“width - x -tempWidth” 拷贝到监视器执行时,这个数据又是对的。鼠标移到 “width”或者将“width”添加到监视,值也是对的。但是 processRect.y运算结果始终不对。

      后面试着计算“height- x -tempWidth”,发现 数值和processRect.y数值一致。相当于 width和height数值发生对调。到头文件,发现height和width对调。更改回来,结果正确。

      原因:

        1.监视和鼠标移动查看变量,是以函数声明为准;

        2.执行是以定义实参为主。

          

  • 相关阅读:
    5860. 从双倍数组中还原原数组
    5847. 找到所有的农场组
    5846. 找到数组的中间位置
    442. 数组中重复的数据
    1987. 不同的好子序列数目
    1986. 完成任务的最少工作时间段
    1985. 找出数组中的第 K 大整数
    1984. 学生分数的最小差值
    学习内容整合
    spring-DI和spring-mybatis整合
  • 原文地址:https://www.cnblogs.com/PiaoLingJiLu/p/14237690.html
Copyright © 2011-2022 走看看