2012-10-11 8 views
0

파생 클래스가 아닌 다른 클래스에서 함수를 호출하는 방법이 있는지 궁금합니다. 예를 들어 다른 클래스에 속한 함수 호출

...

만약 내가 가지고 내가 광장에 완전히 unrealated 다른 클래스의 삼각형이있는 경우, 어떻게 든 삼각형 객체에 광장의 색상 funciton를 호출 할 수 있습니다, 함수의 색상을 가지고 클래스 광장?

친구가 여기에서 사용할 수 있는지 궁금하지만, 읽은 것에서는 내가 읽을 수있는 것을 오해하지 않는 한 그렇게 할 수 없습니다.

상속 관계를 만들지 않고 이것을 구현하는 가장 좋은 방법은 무엇입니까?

+0

Square에서 색상 기능을 삼각형에 적용하면 어떤 점이 있습니까? 좀 더 일반적으로, 당신이 스스로 이것을 원한다고 생각할 때, 당신의 함수는 잘못된 클래스에 있습니다 (또는 클래스에 있어서는 안됩니다). 템플릿 및 정적 다형성에 대한 –

답변

1

무엇을 당신의 추구가 할 수있는 것은이 같은 인 경우 :

Square s; 
Triangle t; 
t.colour(); // invoke Square::colour() on a Triangle 

당신은 단순히 모방 Square::colour이 무엇 삼각형의 함수를 선언하지 않는 한 나는, 당신은 할 수 없습니다 죄송하지만.

당신이 정말로 그 기능을 필요로하는 경우 공유 할 현명한 옵션은이 같은 독립형 템플릿 함수로 선언하는 것입니다

다음
template<typename Shape> 
void colour(Shape s){ 
    //Do stuff 
} 

삼각형과 사각형의 내부 내장이 액세스 할 수 있도록하기 위해 해당 수업의 친구 인 void colour<Triangle>()void colour<Square>() 명의 친구를 만드십시오.

+0

예. – jozefg

0

대답은 아니오입니다. 귀하의 요청은 불가능합니다. color 메소드는 사각형 내에 캡슐화되고 차이 클래스의 관련이없는 객체에는 적용되지 않습니다. 상속 (모양에서 - 당신이 상속을 말한 것을 알고 있습니다), 또는 사각형을위한 색상 방법을 다시 구현하십시오.

0

아니, 부끄럽게 생각해서 죄송합니다. 하지만 기본 클래스 'shape'을 사용하고이 클래스에서 도형을 도출하는 것이 좋습니다.

class Abc //Abstract base class 
{ 
    public: 
     virtual ~Abc();        //destructor 
     virtual double Color();   
     virtual double Area() const = 0;     //pure virtual, MUST be overridden 
    private: 
     //specific variables that apply to all shapes 
}; 

class Square : public Abc //derived class from pure virtual class 
{ 
    public: 
     Square(); 
     virtual double Color(); 
     virtual double Area() const; //redefine color here 
     ~Square(){} 
    private: 
     //square vars here 
}; 
관련 문제