gpt4 book ai didi

java - 在哪些情况下我们将变量设为公有而将方法设为私有(private)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:26 24 4
gpt4 key购买 nike

目前我正在学习 java 和 C++ 的基础知识。我在 Let Us C++ 一书中读到,出于安全目的,几乎在每种情况下,我们都将实例变量设为私有(private),将方法设为公有。但本书中也提到,在某些情况下,我们将变量设为公有,将方法设为私有(private)。。

我一直在想,在什么情况下我们会这样做。谁能解释一下。

最佳答案

私有(private)方法(或 C++ 术语中的私有(private)成员函数)主要用作辅助函数。例如,想一想您想要实现分数的情况,但又想确保您的分数始终被归一化。然后你可以使用一个私有(private)成员函数 normalize() 来标准化你的分数,并且在每个可能导致非标准化分数的操作之后调用它,例如(C++ 代码):

class Fraction
{
public:
Fraction(int num, int den = 1);
Fraction operator+=(Fraction const& other);
Fraction operator*=(Fraction const& other);
// ...
private:
int numerator, denominator;
};

Fraction::Fraction(int num, int den):
numerator(num),
denominator(den)
{
normalize();
}

Fraction Fraction::operator+=(Fraction const& other)
{
int new_den = denominator*other.denominator;
numerator = numerator*other.denominator + denominator*other.numerator;
denominator = new_den;
}

Fraction Fraction::operator*=(Fraction const& other)
{
numerator *= other.numerator;
denominator *= other.denominator;
normalize();
}

void Fraction::normalize()
{
int factor = gcd(numerator, denominator);
numerator /= factor;
denominator /= factor;
}

另外,C++ 对私有(private)函数的特定使用是基于这样一个事实,即在 C++ 中私有(private)函数仅与访问控制有关,与可见性无关。这使得可以在基类中进行不可覆盖的前后条件检查,同时使实际函数成为虚拟函数:

class Base
{
public:
foo frobnicate(some arguments);
private:
virtual foo do_frobnicate(some arguments) = 0;
};

foo Base::frobnicate(some arguments)
{
check_precondition(arguments);
foo result = do_frobnicate(arguments);
check_post_condition(foo);
return foo;
}

Base 派生的类将覆盖 do_frobnicate,而用户将调用 frobnicate,无论派生类是什么,它总是检查前置/后置条件

关于java - 在哪些情况下我们将变量设为公有而将方法设为私有(private)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17229169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com