以下是一个示例:
在circle.h中
class circle
{
double _radius;
public:
double getRadius() {return _radius;}
void setRadius(double r) {_radius=r;}
}
在主中
int main()
{
circle a;
cout<<a.getRadius(); // I want to use "a.radius"
a.setRadius(3.2); // I want to use "a.radius=3.2"
}
那么第一个问题是为什么我们应该使用get和set函数访问实例变量而不是直接访问它们?第二个问题是如何使运算符重载以使get和set函数调用看起来简洁(就像Objective-C所做的那样)?
最佳答案
当然,使您希望使用的语法最简单的方法是使_radius
成为名为radius
的公共(public)成员:
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
这样的东西。您可能希望通过具有一个成员函数来执行此操作,该成员函数会检查给定的新半径以确保其大于0。circle
作为成员保持其半径,但是任何客户唯一想知道的就是它的面积。您可以将radius
设为私有(private),然后提供getArea
函数,如下所示:class circle
{
public:
circle(double radius)
: radius(radius) { }
double getArea() {
return PI * radius * radius;
}
private:
double radius;
}
作为您的getter和setter的另一种命名方案,很简单,有两个重载函数-一个用于设置,另一个用于-像这样:
class circle
{
public:
void radius(double); // Set the radius
double radius(); // Get the radius
private:
double radius;
}
关于c++ - 如何在C++中访问Objective-C的getter和setter之类的实例变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15902474/