我只是想知道是否有办法从另一个不是派生类的类调用函数。
例如......
如果我有一个具有功能颜色的类Square,如果我有另一个类Triangle,完全没有与Square相关,我可以在Triangle对象上调用Square的颜色函数吗?
我想知道朋友是否可以在这里使用,但是根据我所读到的,它不能,除非我误解了我读过的内容。
在不创建继承关系的情况下实现此目的的最佳方法是什么?
答案 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
};