c++ - 无法使用成员函数更改私有(private)变量

标签 c++ c++11

#include <iostream>
#include <string>

using namespace std;

struct Point {
private:
    int xCord,yCord;

public:
    void setX(int x);
    void setY(int y);
    int getX();
    int getY();
    int rotate(int x, int y, Point p1);
    int moveHorizontally(int x, int a, int b);
    int moveVertically(int y, int a, int b);    
};

int main() {
    Point p1;

    p1.setX(1);     //sets X
    p1.setY(2);     //sets Y

    cout << p1.getX() << ", " << p1.getY() << endl;  //prints current value of X & Y 

    p1.rotate(p1.getX(), p1.getY(), p1);
    cout << p1.getX() << ", " << p1.getY() << endl; 

    return 0;
}

void Point::setX(int newX) {
    xCord = newX;
}

void Point::setY(int newY) {
    yCord = newY;
}

int Point::getY() {       //This will just return the y Cord.
    return yCord;
}

int Point::getX() {      //This will just return the x Cord.
    return xCord;
}

int Point::moveHorizontally(int x, int tempX, int tempY) {
    //Move the point to the right if positive.
    //Move the point to the left if negative.
    int newX = tempX + (x);
    return newX;
}

int Point::moveVertically(int y, int tempX, int tempY) {
    //Move the point up if positive.
    //Move the point down if negative.
    int newY = tempY + (y);
    return newY;
}

int Point::rotate(int tempX, int tempY, Point p1){  
    //(1,2) -->> (-2,1)
    int tempX_DNC = tempX;
    int tempY_DNC = tempY;
    int quadrant;

    if((tempX > 0) && (tempY > 0)) {     //Quadrant 1: x(positive), y(positive)  Then rotates to Quad 2
        quadrant = 1;
        tempX = -(tempY);
        tempY = tempX_DNC;
    } else if ((tempX < 0) && (tempY > 0)) {      //Quadrant 2: x(negative), y(positive)  Then rotates to Quad 3
        quadrant = 2;
        tempX = -(tempY_DNC);
        tempY = tempX_DNC;
    } else if ((tempX < 0) && (tempY < 0)) {     //Quadrant 3: x(negative), y(negative)   Then rotates to Quad 4
        quadrant = 3;
        tempX = -(tempY_DNC);
        tempY = tempX_DNC;
    } else if ((tempX > 0) && (tempY < 0)) {     //Quadrant 4: x(positive), y(negative)  Then rotates to Quad 1
        quadrant = 4;
        tempX = -(tempY_DNC);
        tempY = tempX_DNC; 
    } else {
        quadrant = 0;
    }

    //This will rotate the points 90* to the left.
    //(1,2) will then become (-2,1)
    //I could have if in quadrant1, all are positive, if in quadrant 2 the x would be negative and y would be positive
    //If in quadrant 3 the x and y will both be negative, if in quadrant 4 the x would be positive and the y would be negative
    cout << tempX << ", " << tempY << endl;
    p1.setX(tempX);
    p1.setY(tempY);
    cout <<"x is: " <<p1.getX() <<endl;
    cout <<"Y is: " <<p1.getY() <<endl;
}

代码如上。

所以我正在创建一个类 Point。 Point 有 2 个私有(private)变量 xCord,yCord。我想调用 rotate 函数并使其能够修改 xCord、yCord,但它不能。我不确定为什么。我尝试将 Point p1 传递给函数并查看是否可以解决问题,但它没有,我还尝试不传递 Point p1 并仅在函数定义中包含 Point p1。

p1.setX(变量); 在 main() 中工作。但是当我在另一个成员函数中调用 p1.setX(VARIABLE) 时不是。

最佳答案

您正在将 p1 的拷贝传递给 rotate 函数。只有这个拷贝被修改。

关于c++ - 无法使用成员函数更改私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898175/

相关文章:

c++ - 在 vector.push_back() 导致重新分配后如何让 vector 迭代器指向 vector ?

c++ - 模板模板参数扣: three different compilers three different behaviors

c++ - 为什么for循环在以下不同情况下表现不同

c++ - 重载运算符中的类型不匹配(编写管道)

c++ - 将 `auto` 关键字与 STL 迭代器一起使用

c++ - 模板非类型参数常量限制过滤库

c++ - c 中的 fork() 命令——这段简单代码的输出是什么?

c++ - 使用 Ceres 优化多维函数

c++11 - OpenGL 与实例化对象的碰撞检测

c++ - C++-检查一个字符串数组是否包含另一个字符串的所有元素