Частные функции класса доступны?

Я пытался изучать C ++ в течение некоторого времени. Недавно я наткнулся на следующий фрагмент кода:

#include <iostream>

using namespace std;

class Point {
private:
double x_, y_;

public:
Point(double x, double y){
x_ = x;
y_ = y;
}

Point() {
x_ = 0.0;
y_ = 0.0;
}

double getX(){
return x_;
}

double getY(){
return y_;
}

void setX(double x){
x_ = x;
}

void setY(double y){
y_ = y;
}

void add(Point p){
x_ += p.x_;
y_ += p.y_;
}

void sub(Point p){
x_ -= p.x_;
y_ -= p.y_;
}

void mul(double a){
x_ *= a;
y_ *= a;
}

void dump(){
cout << "(" << x_ << ", " << y_ << ")" << endl;
}
};

int main(){
Point p(3, 1);
Point p1(10, 5);

p.add(p1);
p.dump();

p.sub(p1);
p.dump();

return 0;
}

И по жизни я не могу понять, почему методы void add(Point P) а также void sub( Point p ) Работа.

Я не должен получить ошибку, как "cannot access private properties of class Point" или что-то, когда я пытаюсь использовать add или же sub?

Программа составлена ​​с gcc версия 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5),
При запуске выдает:

(13, 6)
(3, 1)

4

Решение

Приватное ключевое слово указывает, что эти члены доступны только из функций-членов и друзей класса. Закрытые переменные доступны для объектов того же типа, даже из других экземпляров класса.

Это не о безопасности, что думают многие люди. Речь идет о сокрытии внутренней структуры класса от других кодов. Требуется, чтобы класс не испортил другие экземпляры случайно, поэтому нет смысла скрывать переменные от других экземпляров. (На самом деле это было бы немного сложнее реализовать, и нет или мало причин для этого.)

7

Другие решения

private члены не могут быть доступны извне класса, за исключением friendс, но может быть из любого места внутри класса.

5

Вы можете вызывать сами методы, потому что они находятся в public раздел определения класса, и они могут получить доступ private члены, потому что они являются частью класса.

private:
double x_, y_;

public:
Point(double x, double y)
Point()
double getX()
double getY()
void setX(double x)
void setY(double y)
void add(Point p)
void sub(Point p)
void mul(double a)
void dump()

Поля в private могут быть доступны только другим ученикам в этом случае (без друзей).

public участники могут быть доступны любому.

3

Поскольку доступ к этим переменным происходит из в классе через его методы; вы не обращаетесь к переменным напрямую.

3

Вы путаете «класс» с «объектом». Чтобы поместить это в ваш образ мышления. Объект может получить доступ к закрытым членам другого объекта, если оба объекта принадлежат к одному и тому же классу.

0

поскольку add(Point p) а также sub (Point p) являются членами класса Pointони могут получить доступ к закрытым членам любого экземпляра Point (в этом случае p) и не только частные члены объекта this,

0

У вас нет прямого доступа к закрытым членам класса. Вы вызываете методы add () и sub (), которые являются публичными методами. Эти являются разрешен доступ к закрытым переменным-членам.

Если бы вы попытались:

p.x_ ++;

это не будет разрешено, так как x_ является частным для класса Point

-1
По вопросам рекламы [email protected]