2017-11-27 3 views
2

주어진 점이 원 (xy 평면에있는 정수)에 포함되어 있는지 확인하는 함수를 작성하려고합니다. 그 일을 위해, 나는 아래에 표시된 것과 같이 쓴 클래스를 사용하고 싶다.클래스를 기반으로 함수를 구현하는 데 어려움이 있습니다

class Point 
{ 
public: 
Point(int x, int y); 
int getX() const; 
int getY() const; 
void setX(int x); 
void setY(int y); 

private: 
int x, y; 
}; 
class Circle 
{ 
public: 
Circle(int x, int y, int r); 
bool contains(const Point &p) const; 

private: 
const Point center; 
int radius; 
}; 

나는 기능 '포함'을 서면으로 어려움을 찾을 수 있습니다. 내가 한 것은 다음과 같습니다. 이 함수를 작성할 때 "멤버 Point :: x에 액세스 할 수 없습니다."라는 오류가 표시되며 잘못된 점을 이해할 수 없습니다.

bool Circle::contains(const Point &p) const 
{ 

    if ((p.x-center.x)>=(-1*radius) && (p.x-center.x)<=radius && (p.y-center.y)>=(-1*radius) && (p.y-center.y)<=radius) 
     return true; 
    return false; 

}

+5

'p.x'가'private'이기 때문에'p.x'를 사용할 수 없습니다. 대신에'p.getX()'를 사용해야합니다. getter와 setter를 삭제하고'x'와'y''를'public'으로 만드는 것이 더 합리적입니다. – nwp

답변

3

x 기본적은 직접 Point 클래스 외부를 액세스 할 수 없다는 것을 의미 클래스 Point전용 데이터 부재이다.

외부 Point 클래스에서 x 클래스에 액세스하려면 x을 반환하는 public 함수가 필요합니다.

int getX() const { 
    return x; 
} 

전화는 외부 Point 클래스에서 x에 액세스해야 할 때마다이 기능을 사용하지 않음.

1

클래스 외부의 비공개 멤버는 액세스 할 수 없습니다. Point 클래스에서 x은 개인 회원이므로 Circle에서 액세스 할 수 없습니다.

코드에 공개 기능 int getX() const이 있습니다.이 코드는 다른 케이스에서 x에 액세스하여 귀하의 케이스에 맞게 제작되었습니다.

는 다음과 같이 코드를 찾아야한다 그것으로, Circle에서이 공용 멤버 함수를 사용해야합니다

bool Circle::contains(const Point &p) const 
{ 
    // Copy of question code, note that this code doesn't do what you think it does 
    if ((p.getX()-center.getX())>=(-1*radius) && 
     (p.getX()-center.getX())<=radius  && 
     (p.getY()-center.getY())>=(-1*radius) && 
     (p.getY()-center.getY())<=radius) 
    { 
     return true; 
    } 
    return false; 
} 
0

나는 다음과 같은 코드가 확인 것 같다. 나는 틀렸어?

bool Circle::contains(const Point &p) const 
{ 
    int distX, distY; 

    distX=p.getX()-center.getX(); 
    distY=p.getY()-center.getY(); 

    if ((distX*distX + distY*distY) > (radius*radius)) 
     return false; 
    return true; 
} 

여러분 모두에게 감사드립니다.

+0

지금 사실입니까? –