我只是想知道是否有办法从另一个不是派生类的类中调用函数。
例如...
如果我有一个类 Square,它有一个函数 colour,如果我有另一个类 Triangle,完全与 Square 无关,我可以在 Triangle 对象上调用 Square 的颜色函数吗?
我想知道是否可以在这里使用朋友,但从我所阅读的内容来看,它不能,除非我误解了我所阅读的内容。
在不创建继承关系的情况下实现这一点的最佳方法是什么?
我只是想知道是否有办法从另一个不是派生类的类中调用函数。
例如...
如果我有一个类 Square,它有一个函数 colour,如果我有另一个类 Triangle,完全与 Square 无关,我可以在 Triangle 对象上调用 Square 的颜色函数吗?
我想知道是否可以在这里使用朋友,但从我所阅读的内容来看,它不能,除非我误解了我所阅读的内容。
在不创建继承关系的情况下实现这一点的最佳方法是什么?
如果您想要做的是这样的事情:
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>()
的类的朋友。
答案是否定的,您的要求是不可能的。color 方法封装在 square 中,不会应用于差异类的无关对象。要么继承(从形状 - 我知道你说没有继承),或者也重新实现正方形的颜色方法。
不,很抱歉让你失望了。但我建议使用基类“形状”,并从该类派生形状。
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
};