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

时间:2014-09-08 07:43:42

标签: c++ qt class oop sharing

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

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_moviechild_movie0两个child_movie1值时,它们都共享setplot i的相同值成为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的{​​{1}}变量更改为child_movie0

1 个答案:

答案 0 :(得分:2)

使用

int movie;

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

改为movie 成员变量

class subwindow_movie {
    int movie;

public:

    ...
}

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

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