当然,使您希望的语法可用的最简单方法是创建_radius
一个名为的公共成员radius
:
class circle
{
public:
double radius;
}
现在你可以像这样使用它:
circle c;
c.radius = 10.0;
但是,您不应该仅根据您希望如何编写代码(或者您可能如何在 C# 中编写代码)来做出此类决定。我建议您为每个成员考虑以下几点:
直接设置成员有意义吗?也许成员只是对象状态的私有部分,并受其他成员函数的影响。考虑以下示例,您真正想要公开的接口只是一个增加 大小的函数circle
:
class circle
{
public:
circle(double radius, double delta = 1.0)
: radius(radius), delta(delta) { }
double increaseSize() {
radius += delta;
return radius;
}
private:
double radius;
double delta;
}
您需要强制执行不变量吗?考虑一下,也许,你已经决定不可能circle
有负半径的 a 这样的东西。您可能希望通过使用一个成员函数来检查给定的新半径以确保它大于 0 来强制执行此操作。
您想通过界面提供成员的一些不同表示吗?也许您希望circle
保留其作为成员的半径,但任何客户唯一想知道的是它的区域。您可以将其设为radius
私有,然后提供getArea
如下函数:
class circle
{
public:
circle(double radius)
: radius(radius) { }
double getArea() {
return PI * radius * radius;
}
private:
double radius;
}
以上几点可能目前都不适用,但将来可能会适用。如果您有这种远见,最好现在提供 getter 和 setter 函数。这确保了客户端使用的接口以后不会改变。
作为 getter 和 setter 的另一种命名方案,简单地拥有两个重载函数是很常见的——一个用于设置,一个用于获取——如下所示:
class circle
{
public:
void radius(double); // Set the radius
double radius(); // Get the radius
private:
double radius;
}