加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在不使用c中的全局变量的情况下存储对象的状态

发布时间:2020-12-16 09:36:33 所属栏目:百科 来源:网络整理
导读:我是C的新手,在学习的过程中我偶然发现很多地方都认为应该避免使用全局变量并在非常罕见的情况下使用. 我的问题是,如何存储对象的状态,以便以后可以在不使用全局变量的情况下访问它?这是一个例子: Circle类可以通过使用直径,x和y作为全局来存储其状态.然后
我是C的新手,在学习的过程中我偶然发现很多地方都认为应该避免使用全局变量并在非常罕见的情况下使用.

我的问题是,如何存储对象的状态,以便以后可以在不使用全局变量的情况下访问它?这是一个例子:

Circle类可以通过使用直径,x和y作为全局来存储其状态.然后可以使用方法修改和检索这些值.

有没有办法在不使用首选的全局变量的情况下完成上述操作?

谢谢

编辑:
我把全局变量与成员变量混淆了,这就是问题所在.现在我对提出这个问题感到非常愚蠢,但希望这会有助于其他人.

解决方法

如果你使用全局变量来存储Circle的状态,那么你任何时候都只能有一个Circle,因为如果你有两个,他们都会尝试使用相同的全局变量来存储它们的状态,这将是凌乱的.

使状态变量成员变量,以便每个类实例都有自己的版本.这是面向对象编程的原则之一.

如果您需要在类的所有实例之间共享变量,请将它们设为静态成员变量.这样你就知道只有你的对象可以访问它们(如果你选择使用它们的私有或受保护的可见性),并且没有其他人不知道他们正在做什么将与他们搞混.

例:

class Circle {
public:
    Circle(double x,double y,double diameter) : x(x),y(y),diameter(diameter) { }
    double X() const { return x; }
    double Y() const { return y; }
    double diameter() const { return diameter; }

    ...

private:
    double x,y,diameter;
};

现在当我们有两个圈子时,它们表现得很好:

Circle c1(4.0,4.0,6.0);
Circle c2(1.0,6.0,3.0);
cout << c1.X() << endl
     << c2.X() << endl;
// prints 4 and 1

但如果我们这样做,使用全局变量:

// BAD,DON'T DO THIS
double x = 0,y = 0,diameter = 0;

class Circle {
public:
    Circle(double _x,double _y,double _diameter) {
        x = _x,y = _y,diameter = _diameter;
    }

    double X() const { return x; }
    double Y() const { return y; }
    double diameter() const { return diameter; }
};

当我们有两个圈子时:

Circle c1(4.0,3.0);
cout << c1.X() << endl
     << c2.X() << endl;
// prints 1 and 1

您创建的最后一个圆圈将覆盖所有其他圆圈的数据.如你所见,这不是一件好事.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读