c ++ getter方法调用构造函数

时间:2017-04-08 07:47:17

标签: c++

我对C ++和Opengl很陌生,而且我在这里可能会遇到许多问题,这些问题给我带来了以下问题:

假设我有一个MouseManager对象,它有一个Point(x,y)来存储它的位置。默认构造函数将其设置为Point(50,50)。它有一个方法“moveMouse”,它更新了这个位置。

void MouseManager::moveMouse(int x, int y) {
    cout << "values: " << x << " " << y << endl;
    cout << "BEFORE: " << position.getX() << " " << position.getY() << endl;
    position = Point(x,y);
    cout << "AFTER: " << position.getX() << " " << position.getY() << endl;
}

通过cout声明,我已确认以下内容:

values: 614 188   //this is the actual mouse position being passed by glut
BEFORE: 50 50     //this is the Point values before the update
AFTER: 614 188    //this is the updated values

然而,在NEXT更新时,BEFORE恢复到50,50 - 即它实际上没有更新。

values: 614 188
BEFORE: 50 50
AFTER: 614 188
values: 616 187
BEFORE: 50 50
AFTER: 616 187
values: 619 187
BEFORE: 50 50
AFTER: 619 187
values: 623 186

我一直试图找出原因,以及我是否在某种程度上无意中再次调用了构造函数,但我似乎并不是这样。

目前我的代码设置如下:

  1. OpenGL鼠标功能调用包含所有内容的gameManager对象,包括MouseManager。
  2. MouseManager运行moveMouse方法
  3. moveMouse使用Point对象创建一个新的Point(x,y),其中包含更新的x和y位置。

    void callMouseManager(int x, int y){    //from gl
        game.getMouseManager().moveMouse(x, HEIGHT - y);
    }
    ++++++++
    MouseManager GameManager::getMouseManager(){    //from inside GameManager class
        return mouseManager;
    }
    
  4. 我不知道发生了什么,希望有人可以帮我理解我做错了什么。

        #include "MouseManager.h"
        #include <iostream>
    
        using namespace std;
    
        MouseManager::MouseManager() {
            cout << "CONSTRUCTOR" << endl;
            position = Point(50,50);
        }
    
        MouseManager::~MouseManager() {
            // TODO Auto-generated destructor stub
        }
    
        void MouseManager::moveMouse(int x, int y) {
            cout << "values: " << x << " " << y << endl;
            cout << "BEFORE: " << position.getX() << " " << position.getY() << endl;
            position.setX(x);
            position.setY(y);
            cout << "AFTER: " << position.getX() << " " << position.getY() << endl;
        }
    
        Point MouseManager::getPosition() {
            return position;
        }
    

1 个答案:

答案 0 :(得分:3)

功能

#pragma omp parallel for num_threads(nThreads) shared(a,b,c,n) private(temp,i,j,k) // using OMP pragma for parallel
    for(i=0;i<n;i++)
    {
      for(j=0;j<n;j++)
      {
        sum=0;
        for(k=0;k<n;k++)
          sum+=a[i*n+k]*b[k*n+j];
        c[j+n*i] = sum;
      }
    }

返回MouseManager GameManager::getMouseManager(){ return mouseManager; } 的副本。您所做的任何更改都在副本上进行。更改它以返回参考。

mouseManager