如何删除对象之间的变量共享

how to remove variable sharing between objects?

本文关键字:之间 变量 共享 对象 何删除 删除      更新时间:2023-10-16

嗨,我是面向对象编程的新手。 在这里,我打算制作三个动画情节

subwindow_movie *child_Movie = new subwindow_movie;
child_Movie->setGeometry(20,100,620,560);
child_Movie->setplot(0);
child_Movie->show();
subwindow_movie *child_Movie1 = new subwindow_movie;
child_Movie1->setGeometry(680,100,620,560);
child_Movie1->setplot(1);
child_Movie1->show();

subwindow_movie *child_Movie2 = new subwindow_movie;
child_Movie2->setGeometry(325,350,620,560);
child_Movie2->setplot(2);
child_Movie2->show();

但问题是它们都具有相同的setplot值,即当第三个subwindow_movie被创建child_movie0并且child_movie1两个setplot值都变得2时;如何摆脱它......下面是类中的设置值函数

#include "subwindow_movie.h"
#include "ui_subwindow_movie.h"
#include "plot.h"
#include <qapplication.h>
#include <qmainwindow.h>
int movie;
subwindow_movie::subwindow_movie(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::subwindow_movie)
{
    ui->setupUi(this);
}
subwindow_movie::~subwindow_movie()
{
    delete ui;
}
void subwindow_movie::setplot(int value)
{
     if (value ==0)
     {   d_plot0 = new Plot( this );
         movie=0;}
     else if (value ==1)
     {   d_plot1 = new Plot( this );
         movie=1;}
     else if (value ==2)
     {   d_plot2 = new Plot( this );
         movie=2;}
}

void subwindow_movie::on_movie_slider_valueChanged(int value)
{
    if (movie ==0)
    {  d_plot0->setAlpha(value);
       }
    else if (movie ==1)
    {  d_plot1->setAlpha(value);
    }
    else if (movie ==2)
    {  d_plot2->setAlpha(value);
    }
}

真正的问题是int movie随着新child_movie的创建而更改会导致child_movie0 movie2运行。 我不希望movie变量随着child_movie1的创建而更改为child_movie0

int movie;

movie变量只有一个实例(它是全局变量(。每次设置其值时,都会覆盖以前的值。

改为movie成员变量

class subwindow_movie {
    int movie;
public:
    ...
}

然后,movie 可作为您正在创建的每个subwindow_movie对象的单独实例使用。在 subwindow_movie 方法中,您仍然可以像以前一样访问变量。

从本质上讲,你永远不应该使用全局变量 - 另请参阅 http://www.learncpp.com/cpp-tutorial/42-global-variables:为什么全局变量是邪恶的