我有一个名为Contoller的课程。我想从该类创建一个对象,并在运行时反复更改transactionValue和transactionId。什么是最好的方式。我想我可以从默认构造函数创建一个对象,并使用setControllerValues获取新值。这是最佳做法吗?
class Controller{
public:
Controller();
Controller(int,int);
setControllerValues(int,int);
private:
int transactionValue;
int transactionId;
};
int main()
{
Controller ct;
ct.setControllerValues(3,4);
ct.setControllerValues(6,7);
ct.setControllerValues(34,45);
}
编辑:我听说过有关单身人士的事情。我应该用它吗?(我改变了“骨架”)
答案 0 :(得分:2)
让它成为全球化的!不,等等,全局变坏了。让它成为一个单身人士!不,等等,单身人士是反模式。无论何处需要,都可以将其作为参数传递!不,等等,流浪汉数据不好。让它成为一个全球性的!
一个人要做什么?
你支付了钱,然后你可以选择。
答案 1 :(得分:1)
是的,这可以被视为良好做法。那里没有错。也许您想在setControllerValues
写入私人成员之前进行一些数据验证。但是你可以在那里找到非常直接的OOP。
答案 2 :(得分:1)
你听到的可能是singleton,而不是骨架。
当然,你可以使用你展示的方法,但是让我问你:为什么你会选择这个而不是创建单独的对象?
我不喜欢它,原因如下:
简而言之,我不认为这种方法有任何好处,不知道可能使其更合理的其他要求。您已经引入了许多增加的复杂性,以便在对象创建期间保存一些指令,无论如何都会由编译器进行优化。这是一个糟糕的权衡,IMO。
关于单身人士,一般来说我也不喜欢他们:) 原因如下:
话虽这么说,但有时候他们才有意义。但是,你的例子似乎并非如此。
答案 3 :(得分:1)
取决于。
如果没有可变状态(或很少),有些程序更容易推理;例如,多线程程序。
其他面向对象的方法会说吸气剂和制定者都是诅咒。
在性能和在堆栈上创建新对象方面,c ++ 11和编译器非常擅长于创建高效机器代码的最佳方法,远比你我好。
我会考虑使用赋值运算符。它允许您使用一个对象的值来修改另一个对象:
class Controller {
public:
Controller& operator=(const Controller& other) {
transactionValue = other.transactionValue;
transactionId = other.transactionId;
return *this;
}
private:
int transactionValue;
int transactionId;
};
并使用:
Controller permanent(12, 5678);
//...
permanent = Controller(23, 6789);