C++ 如何删除对象之间的变量共享?
嗨,我是面向对象编程新手。这里我打算制作三个动画情节C++ 如何删除对象之间的变量共享?,c++,qt,class,oop,sharing,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->set
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
值,即当创建第三个子窗口时child\u movie0
和child\u movie1
这两个setplot
值变为2
;如何摆脱这个。。。下面是类中的set value函数
#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);
}
}
#包括“subwindow_movie.h”
#包括“ui_子窗口_movie.h”
#包括“plot.h”
#包括
#包括
国际电影;
子窗口电影::子窗口电影(QWidget*父窗口):
QDialog(父级),
ui(新ui::子窗口\电影)
{
用户界面->设置用户界面(此);
}
子窗口电影::~子窗口电影()
{
删除用户界面;
}
void子窗口_movie::setplot(int值)
{
如果(值==0)
{d_plot0=新绘图(此);
电影=0;}
else if(值==1)
{d_plot1=新绘图(此);
电影=1;}
else if(值==2)
{d_plot2=新绘图(此);
电影=2;}
}
无效子窗口\u movie::在\u movie\u滑块上\u值已更改(int值)
{
如果(电影==0)
{d_plot0->setAlpha(值);
}
else if(电影==1)
{d_plot1->setAlpha(值);
}
else if(电影==2)
{d_plot2->setAlpha(值);
}
}
真正的问题是int movie
,它随着新child_movie
的创建而改变,导致child_movie0
运行movie2
。我不希望movie
变量随child\u movie 1的创建而更改child\u movie 0
int电影代码>
movie
变量只有一个实例(它是一个全局变量)。每次设置其值时,都会覆盖上一个值
将电影
改为成员变量:
class subwindow_movie {
int movie;
public:
...
}
然后,movie
作为您正在创建的每个子窗口\u movie
对象的单独实例可用。在子窗口\u movie
方法中,仍然可以像以前一样访问变量
基本上,您不应该使用全局变量-另请参见:为什么全局变量是邪恶的尝试了您的建议,但电影价值仍然随着新的child\u电影声明而改变(@user3871970 Good:)你还有什么特别需要做的吗?我可以在我的答案中添加什么?没有,我一开始忽略了其他一些g_变量。