C++ 我怎样才能通过友谊正确地发挥我的作用?
我有一个抽象类,如:C++ 我怎样才能通过友谊正确地发挥我的作用?,c++,vector,C++,Vector,我有一个抽象类,如: class Polygon { public: vector < int > sides; virtual void circumreference()=0; virtual void print() = 0; void SaveAndRead() { save(sides); load(sides); } friend void save(std::vector < in
class Polygon {
public:
vector < int > sides;
virtual void circumreference()=0;
virtual void print() = 0;
void SaveAndRead() {
save(sides);
load(sides);
}
friend void save(std::vector < int >&);
friend void load(std::vector < int >&);
};
类多边形{
公众:
向量边;
虚空环绕()=0;
虚空打印()=0;
void SaveAndRead(){
保存(侧面);
负载(侧面);
}
朋友无效保存(std::vector&);
友元无效荷载(标准::向量&);
};
“保存”和“加载”是类外多边形。我试图在函数SaveAndRead()中调用函数save和load,但出现了诸如“save:ID未找到”、“load:ID未找到”之类的错误。
有人能帮我解决这个问题吗?我会很感激的 我知道保存和加载功能位于另一个类之外。在这种情况下,应该将该类的名称添加到函数定义中
friend void StoreFunctionClass::save(std::vector<int>&);
friend void StoreFunctionClass::save(std::vector&);
您不能仅将保存和加载声明为多边形的朋友,从而取代常规声明。
也就是说,您还必须在多边形之前声明它们
然后,为了使整个程序能够编译,您需要在.cpp文件中定义save
和load
另外,您可能希望save
至少获取一个const
引用
//polygon.hpp
#包括
无效保存(const std::vector&);
空荷载(标准::矢量&);
类多边形{
公众:
std::向量边;
虚空环绕()=0;
虚空打印()=0;
void SaveAndRead(){
保存(侧面);
负载(侧面);
}
朋友无效保存(const std::vector&);
友元无效荷载(标准::向量&);
};
//多边形.cpp
#包括“polygon.hpp”
无效保存(const std::vector&){
//保存代码
}
无效荷载(标准::向量&){
//装载代码
}
非相关方面:
- 如果使用
load
初始化其参数,则可能需要按值返回向量
save
和load
似乎是Polygon
的实际成员。友谊很少是一个好的设计选择
有关使用朋友的详细信息
:
friend
的一个典型用途是实现迭代器或任何旨在提供另一个类的特定“视图”的类。您希望授予对此“视图”类的完全访问权,因为它在概念上是它授予访问权的类的一部分
有些人还喜欢重载运算符,或者一字不差地粘贴整个错误消息。另外,这是一种糟糕的设计模式:保存
和加载
应该是多边形的一部分,而不是外部的,或者调用多边形的公共方法或构造函数,这样它就不必是朋友
。感谢您的解释!我像你刚刚写的那样做了-我把这个函数作为类Polygon的成员。大多数程序员都在回顾友谊——我刚刚查过。非常感谢您抽出时间;)