从静态函数创建类对象

发布于 2024-10-21 10:52:52 字数 345 浏览 1 评论 0原文

假设我有如下代码。

class Color
{
static Color a;
public:
static Color newColor(int r,int g,int b){
        Color color;
        color.setR(r);
        color.setG(g);
        color.setB(b);
        return color;
    }
}

可以使用“Color a = Color::newColor(255,0,0);”初始化静态变量“a”吗? 我想我在某处读到使用此方法创建实例将创建该类的两个实例。这样做的正确方法是什么?

Suppose I have a code as following.

class Color
{
static Color a;
public:
static Color newColor(int r,int g,int b){
        Color color;
        color.setR(r);
        color.setG(g);
        color.setB(b);
        return color;
    }
}

Is it alright to initialize the static variable 'a' using 'Color a = Color::newColor(255,0,0);'
I think I read somewhere that creating the instance using this method will create two instances of the class. What is the right way of doing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝天白云 2024-10-28 10:52:52

是的,Color 被实例化为

  1. newCOlor 中局部变量 color 和
  2. 静态 Color a 的两倍(因为您返回一个对象,所以在静态变量定义/初始化时将发生成员明智的复制)。

请务必输入 Color::a = Color::newColor(255,0,0);在 cpp/cc 文件中,这意味着不在头文件中。

Yes Color gets instantiated twice

  1. the local variable color in newCOlor and
  2. the static Color a (since you are returning an object, a member-wise copy will happen at the static variable definition/initialization).

Be sure to put Color::a = Color::newColor(255,0,0); in a cpp/cc file, meaning not in a header file.

孤独患者 2024-10-28 10:52:52

试试这个尺寸:

struct Color
{
    int   R, G, B;
};

Color a = {255, 0, 0};

Try this for size:

struct Color
{
    int   R, G, B;
};

Color a = {255, 0, 0};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文