[英]Return a const reference and non const member function call
我是一位新手C ++程序员,试图磨练我在宠物项目上的技能,但我遇到以下问题。
我有一个名为System的类,其中包含另一个类Agent的单个Object。 我希望外部资源以以下方式调用Agent类对象的方法:
system.agent().exploration(3.0);
其中Exploration(3.0)将主体的内部变量设置为3.0。 为了做到这一点,我通过引用返回了Agent对象:
Agent& agent() {return agent;}
尽管这可行,但是仍然可以按以下方式更改代理:
system.agent() = Agent(1.0,2.0);
就我而言,这是不受欢迎的行为。 为了解决这个问题,我可以将Agent作为const引用返回:
const Agent& agent() {return agent;}
但是,此代码无法编译,因为exploration(float e)方法是非常量的(它修改了agent对象的内部变量)。
在不允许某人完全替换代理对象的情况下,通过System类使代理对象公共接口可用于外部世界的正确方法是什么?
您可以在System类中编写一个包装Agent函数的函数。
class System
{
private:
Agent agent;
public:
void exploration(float num) { agent.exploration(num); }
//...
};
如果您不想允许复制,则应在private下实现自己的重载赋值运算符,但不要实现它。 这将不允许编译器创建其自己的赋值运算符,从而不允许进行复制。
有许多可能的解决方案:使用类代理,修改代理的operator=
,如果不需要吸气剂,则仅在系统中实现探索方法。
但是我建议您将explorer实现为visitor
,这是最佳实践,当您必须分派给子对象时,它很容易实现,您可以通过重载operator()
来获得一个不错的接口,并且在执行以下operator()
时避免重复代码您需要对子对象执行许多不同的操作。 http://en.wikipedia.org/wiki/Visitor_pattern
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.