<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          程序員如何跟 Girl 成為 friend?

          共 2241字,需瀏覽 5分鐘

           ·

          2021-10-02 02:56

          我們知道一個(gè)類的變量或函數(shù)申明了 private,那么在別的類是無法訪問的,最近有個(gè)需求,需要調(diào)用 SurfaceFlinger 的 setActiveConfig 方法來修改幀率,在實(shí)現(xiàn)的過程中,發(fā)現(xiàn) setActiveConfig 是私有的,是沒法直接調(diào)用且編譯也通不過,查看其他處寫的代碼,為什么能調(diào)用?難道有什么黑科技?了解后原來是友元 friend 起了作用。

          友元可以讓私有變量或函數(shù)直接訪問,友元的聲明可以出現(xiàn)在類的任何地方,當(dāng)然友元破環(huán)了封裝機(jī)制,有友元類和友元函數(shù),先來看個(gè)完整的友元類的例子:

          #include <iostream>
          using namespace std;

          class Girl
          {


          public:
              friend class Boy;//友元類,讓Boy能訪問Girl私有變量和函數(shù)
              void setAge(int a);
          private:
              int age=18;
              void getAge();
          };

          void Girl::setAge(int a)
          {
              age=a;
          }

          void Girl::getAge()
          {
              cout<<"This is a secret!"<<endl;
          }

          class Boy
          {


          public:
              Girl* girl;
              Boy(Girl* girl);
              void getAge();

          };

          Boy::Boy(Girl* girl)
          {
              girl=girl;
          }
          void Boy::getAge()
          {
              girl->getAge();

          }

          // 程序的主函數(shù)
          int main( )
          {
              Girl girl;
              Boy* boy =new Boy(&girl);
              boy->getAge();


              return 0;
          }

          運(yùn)行程序,打印

          This is a secret!

          臥槽!

          接下來看下友元函數(shù),申明友元函數(shù)為了是在友元函數(shù)內(nèi)部訪問該類對象的私有成員,友元函數(shù)是不能被繼承的,沒有 this 指針,完整的友元函數(shù)例子如下:

          #include <iostream>
          using namespace std;
          class Girl
          {

          friend void getAge(Girl* g);//友元函數(shù)
          public:
              void setAge(int a);
          private:
              int age=18;
          };

          void Girl::setAge(int a)
          {
              age=a;
          }

          void getAge(Girl* g)
          {
              cout<<"This is a secret!"<<endl;
              cout<<"進(jìn)一步了解:"<<g->age<<endl;
          }

          // 程序的主函數(shù)
          int main( )
          {
              Girl girl;
              getAge(&girl);

              return 0;
          }

          運(yùn)行程序,打印

          This is a secret!
          進(jìn)一步了解:18

          要想獲取 Girl 芳心,首先需要做 friend,也就是說必須顯式地聲明你是 Girl 的 friend,才有進(jìn)一步發(fā)展的機(jī)會,好了,Over。

          瀏覽 54
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  一区二区国产黄片视频在线 | 亚洲精品乱码久久久久久9色 | 国产三级理论视频在线 | 天天射日日舔 | 无码人妻久久一区二区三区蜜桃 |