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.执行是以定义实参为主。

      

原文地址:https://www.cnblogs.com/PiaoLingJiLu/p/14237690.html