C 友元 在乙個類中,訪問另乙個類中的資料。

2022-06-19 03:15:10 字數 1398 閱讀 2162

widget.h

class overview_dialog;//

widget的友元類

class widget : public

qwidget

;

void

widget::on_overviewbtn_clicked()

widget類,以及他的友元類overview_dialog,以及槽函式部分

槽函式的功能是開啟乙個視窗,這個視窗可以訪問widget類物件的資料來繪製圖形。

class overview_dialog : public

qdialog

;

overview_dialog::overview_dialog(widget *parent) :qdialog(parent),ui(new

ui::overview_dialog)

這就是友元類的標頭檔案以及建構函式。

可以得知,在主程式中,已經存在了乙個widget物件,除此之外,我們還在主程式中建立了乙個overview_dialog類的物件,由於overview_dialog類的成員資料報括了乙個widget *w,在對其進行初始化之後,整個程式就同時有了兩個widget物件。

我們知道友元類物件可以訪問另乙個物件中的資料,但是也存在乙個問題就是,如何保證這兩個widget物件是同乙個物件(位址相同,他們的資料才會相同,否則就知識初始化了第二個widget物件而已)。

上述**的結果就是主程式中的widget物件和友元類中建構函式的w並不是同乙個widget物件,如何解決這個問題呢?

我們可以通過給友元類的建構函式新增乙個widget類指標來解決問題。

因此,我們需要對**進行修改,首先需要修改的友元類的建構函式

class overview_dialog : public

qdialog

;

overview_dialog::overview_dialog(widget *parent) :qdialog(parent),ui(new

ui::overview_dialog),w(parent)

對建立友元類物件的**做修改

void

widget::on_overviewbtn_clicked()

請注意以上三部分紅色標記出來的**,首先我們在建構函式的引數中多新增了乙個widget *,並且在建構函式中通過成員初值列的方法將其初始化了。這樣第一步的工作就算完成了

剩下的就只需要我們在建立overview_dialog物件時,給他乙個widget指標(這裡的this就是乙個widget指標),這樣就能保證兩個物件指標指向同一位址。

在乙個類中監聽另乙個類中變數改變

當乙個類中某個變數改變時,需要在另乙個類中做出應對,可以用下面的方法 以android為例 public class a extendsactivity implements b.oncupdatelistenerpublic void oncupdate int c public class bp...

vc 在乙個類中呼叫另乙個類的變數

有幾個前提條件 1.被引用的變數所在類必須被完整地定義,而不是只有前向宣告 例如只是一行class a 2.被引用的變數必須是引用處可訪問的。也就是說,以下條件至少滿足其中之一 2.1.訪問變數的語句所在的類被宣告為被訪問的變數所在類的友元類 2.2.訪問變數的語句所在的函式被宣告為被訪問變數所在類...

把乙個類封裝到另乙個類中 Python

物件的封裝 將乙個類的物件,封裝到,另乙個類中的方法中去 class teacher def init self,tea name,tea age self.teacher name tea name self.teacher age tea age self.salary 2000 老師的初始工資...