调用属于另一个类的函数

时间:2012-10-11 01:43:49

标签: c++

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

例如......

如果我有一个具有功能颜色的类Square,如果我有另一个类Triangle,完全没有与Square相关,我可以在Triangle对象上调用Square的颜色函数吗?

我想知道朋友是否可以在这里使用,但是根据我所读到的,它不能,除非我误解了我读过的内容。

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

3 个答案:

答案 0 :(得分: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>()相应类的朋友。

答案 1 :(得分:0)

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

答案 2 :(得分: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
};