首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >好的编程实践?

好的编程实践?
EN

Stack Overflow用户
提问于 2014-01-20 03:57:26
回答 2查看 222关注 0票数 1

我在想,在使用良好的编程实践方面,应该做什么更好。我有一堂课,帐户。它有一个数据记忆器,m_balance。我的问题是,在我的成员函数中,当我需要使用帐户余额进行比较时,是直接使用m_balance,还是使用成员函数Account::get_balance()。

例如..。

代码语言:javascript
复制
int Account::get_balance() const
{
    return m_balance;
}

void Account::debit( int money_value )
{
    if( money_value > 0 && money_value <= m_balance )
        m_balance -= money_value;
    else if( money_value == 0 )
        throw std::invalid_argument( "Invalid debit value" );
    else if( money_value > m_balance )
        throw std::invalid_argument( "Debit amount exceeds account balance" );
}

或者我应该定义成员函数..。

代码语言:javascript
复制
void Account::debit( int money_value )
{
    if( money_value > 0 && money_value <= get_balance() )
        m_balance -= money_value;
    else if( money_value == 0 )
        throw std::invalid_argument( "Invalid debit value" );
    else if( money_value > get_balance() )
        throw std::invalid_argument( "Debit amount exceeds account balance" );
}

一种做法比另一种更好吗?调用该函数是否需要更多的时间或其他什么?

如果这有意义的话。抱歉如果这让人困惑的话。我不太知道还能怎么解释。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-20 06:16:49

如果将实现放在一个离散的编译单元中,那么是的,可能会有访问该元素的开销,因为程序可能必须执行跳转和返回。但是,编译器/链接器也有可能在“链接时间优化”期间解决这个问题。

您还可以通过提供getter的内联实现来避免这种情况:

代码语言:javascript
复制
class Account {
    double m_balance;
public:
...
    double getBalance() const { return m_balance; }
...
};

这主要是关于良好的封装。当您执行草率或部分封装时,您会给您的用户带来负担,让您了解类在简单访问其成员之外是如何工作的。例如,当您返回原始指针时,通常是这样的--最终用户现在负责知道是否、如何以及何时释放指针值。

另外,吸气器也是防止未来的好方法。也许在将来,您不会主动维护"m_balance“,或者您需要添加一些线程保护来防止访问它。如果您的用户都直接访问m_balance,他们只会得到错误和奇怪的行为。如果他们已经通过了getBalance,他们就不需要改变任何东西了。

票数 1
EN

Stack Overflow用户

发布于 2014-01-20 04:00:45

getBalance向程序保证,任何外部用户/调用者都不能错误地使用m_balance的值(即更改它,等等)。"getter“的概念确保了所有对该数据成员的公共使用都是”获取“,而不是设置。

“这需要更多时间吗?”不是以牺牲安全和良好的代码为代价。早熟的优化是有害的。优化是由于需要而产生的。如果使用函数访问变量会降低代码的速度,那么在运行时可能还有其他方法来降低这种复杂性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21226021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档