C++ 友元:在一个类中,访问另一个类中的数据。
2021-05-04 07:26
标签:通过 overview 问题 pre 参数 class 主程 nullptr view Widget类,以及他的友元类Overview_Dialog,以及槽函数部分 槽函数的功能是打开一个窗口,这个窗口可以访问Widget类对象的数据来绘制图形。 这就是友元类的头文件以及构造函数。 可以得知,在主程序中,已经存在了一个Widget对象,除此之外,我们还在主程序中创建了一个Overview_Dialog类的对象,由于Overview_Dialog类的成员数据包括了一个Widget *w,在对其进行初始化之后,整个程序就同时有了两个Widget对象。 我们知道友元类对象可以访问另一个对象中的数据,但是也存在一个问题就是,如何保证这两个Widget对象是同一个对象(地址相同,他们的数据才会相同,否则就知识初始化了第二个Widget对象而已)。 上述代码的结果就是主程序中的Widget对象和友元类中构造函数的w并不是同一个Widget对象,如何解决这个问题呢? 我们可以通过给友元类的构造函数添加一个Widget类指针来解决问题。 因此,我们需要对代码进行修改,首先需要修改的友元类的构造函数 对创建友元类对象的代码做修改 请注意以上三部分红色标记出来的代码,首先我们在构造函数的参数中多添加了一个Widget *,并且在构造函数中通过成员初值列的方法将其初始化了。这样第一步的工作就算完成了 剩下的就只需要我们在创建Overview_Dialog对象时,给他一个Widget指针(这里的this就是一个Widget指针),这样就能保证两个对象指针指向同一地址。 C++ 友元:在一个类中,访问另一个类中的数据。 标签:通过 overview 问题 pre 参数 class 主程 nullptr view 原文地址:https://www.cnblogs.com/leocc325/p/13196339.htmlWidget.h
class Overview_Dialog;//Widget的友元类
class Widget : public QWidget
{
Q_OBJECT
public:
friend class Overview_Dialog;
explicit Widget(QWidget *parent = nullptr);
private slots:
void on_overviewbtn_clicked();
};
void Widget::on_overviewbtn_clicked()
{
Overview_Dialog *o=new Overview_Dialog();
o->show();
}
class Overview_Dialog : public QDialog
{
Q_OBJECT
public:
explicit Overview_Dialog();
~Overview_Dialog();
private slots:
private:
Ui::Overview_Dialog *ui;
Widget *w;
};
Overview_Dialog::Overview_Dialog(Widget *parent) :QDialog(parent),ui(new Ui::Overview_Dialog)
{
w=new Widget();
ui->setupUi(this);
}class Overview_Dialog : public QDialog
{
Q_OBJECT
public:
explicit Overview_Dialog(Widget *parent = nullptr);
~Overview_Dialog();
private slots:
private:
Ui::Overview_Dialog *ui;
Widget *w;
};
Overview_Dialog::Overview_Dialog(Widget *parent) :QDialog(parent),ui(new Ui::Overview_Dialog),w(parent)
{
ui->setupUi(this);
}
void Widget::on_overviewbtn_clicked()
{
Overview_Dialog *o=new Overview_Dialog(this);
o->show();
}
上一篇:C#笔记
文章标题:C++ 友元:在一个类中,访问另一个类中的数据。
文章链接:http://soscw.com/index.php/essay/82157.html