0

I'm just wondering if there is a way to call a function from another class which is not a derived class.

For example...

If I have class Square which has a function colour, if I have another class Triangle, totally unrealated to Square, can I somehow call the colour funciton of Square on a Triangle object?

I'm wondering if friend can be used here, but from what I have read, it can't, unless I've misunderstood what I've read.

What is the best way to implement this without creating an inheritance relationship?

4

3 に答える 3

1

あなたのやりたいことが次のようなものである場合:

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

申し訳ありませんが、単に機能を模倣する関数を Triangle で宣言しない限り、できませんSquare::colour

その関数を本当に共有する必要がある場合の賢明なオプションは、次のようにスタンドアロンのテンプレート関数として宣言することです。

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

次に、三角形と正方形の内臓へのこのアクセスを許可するために、適切なクラスを作成void colour<Triangle>()して友達にします。void colour<Square>()

于 2012-10-11T01:47:22.043 に答える
0

答えはノーです。あなたの要求は不可能です。color メソッドは正方形内にカプセル化されており、異なるクラスの無関係なオブジェクトには適用されません。継承するか(形状から-継承しないと言ったことは知っています)、正方形のカラーメソッドも再実装します。

于 2012-10-11T01:52:50.480 に答える
0

いいえ、あなたを怒らせてごめんなさい。ただし、基本クラスの「形状」を使用して、このクラスから形状を派生させることをお勧めします。

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
};
于 2012-10-11T01:54:44.663 に答える