0

我只是想知道是否有办法从另一个不是派生类的类中调用函数。

例如...

如果我有一个类 Square,它有一个函数 colour,如果我有另一个类 Triangle,完全与 Square 无关,我可以在 Triangle 对象上调用 Square 的颜色函数吗?

我想知道是否可以在这里使用朋友,但从我所阅读的内容来看,它不能,除非我误解了我所阅读的内容。

在不创建继承关系的情况下实现这一点的最佳方法是什么?

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
}

然后为了允许这种访问 Triangle 和 Square 的内部胆量,结交void colour<Triangle>()适当void colour<Square>()的类的朋友。

于 2012-10-11T01:47:22.043 回答
0

答案是否定的,您的要求是不可能的。color 方法封装在 square 中,不会应用于差异类的无关对象。要么继承(从形状 - 我知道你说没有继承),或者也重新实现正方形的颜色方法。

于 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 回答