Написание простого класса на C ++ - PullRequest
0 голосов
/ 23 марта 2011

Я получаю сообщение о том, что не могу получить доступ к закрытым членам x и y.Как мне написать методы getX () и getY (), чтобы они могли видеть x и y?Спасибо.

#include <iostream>
#include <string>
using namespace std;

class Point {
public:
    Point(int x, int y);
    Point();
    int getX();
    int getY();

private:
    int x, y;
};


int Point::getX() {
    return x;
}

int Point::getY() {
    return y;
}

void main () {

    Point p(5,5);
    Point g;

    cout << p.x << endl;
    cout << g.y;
    string s;
    cin >> s;

}

Ответы [ 6 ]

7 голосов
/ 23 марта 2011

Хм, у вас уже есть написано getX и getY, вам просто нужно использовать их:

cout << p.getX() << endl;
cout << g.getY();

Обратите внимание, что поскольку getX() и getY() не изменяют ваш класс, они должны быть const:

class Point {
public:
    // ...

    int getX() const;
    int getY() const;

    // ...
};

// ...

int Point::getX() const {
    return x;
}

int Point::getY() const {
    return y;
}

// ...
2 голосов
/ 23 марта 2011

Не должно ли быть

cout << p.getX() << endl;
cout << g.getY();
1 голос
/ 23 марта 2011

Ваши get_ методы верны.Проблема в том, что вы не используете их в своей функции main!Попробуйте это:

cout << p.getX() << endl;
1 голос
/ 23 марта 2011

Похоже, вы решили проблему написания функций самостоятельно.Теперь все, что вам нужно сделать, это изменить main для вызова этих функций:

// note the proper return type
int main() {
   Point p(5,5);
   cout << p.getX() << endl;
   // more code
   return 0;
}
1 голос
/ 23 марта 2011

Point::getX() и Point::getY() на самом деле видят x соответственно y - ошибка в вашем main, где вы пытаетесь получить к ним прямой доступ, не используя геттеры, которые вы сделали именно для этой цели. *

cout << p.getX() << endl;
1 голос
/ 23 марта 2011

Вы не можете получить доступ к x и y, так как они являются частными. Однако вы сделали общедоступными getX и getY, поэтому ваш код будет выглядеть так:

cout << p.getX() << endl;
cout << g.getY();
string s;
cin >> s;
...