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

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

概述我是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 THISdouble 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

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

总结

以上是内存溢出为你收集整理的如何在不使用c中的全局变量的情况下存储对象的状态全部内容,希望文章能够帮你解决如何在不使用c中的全局变量的情况下存储对象的状态所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1214049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存