讀幾個小程序瞭解c++:Part 02(友元、常類型)

#include <cstring>
#include <iostream>
using namespace std;

/* 類的主要特點是信息隱藏與封裝,友元函數是爲了實現在類的外部訪
   問類的私人成員(或保護成員),是一扇通向私人(保護)成員的後
   門,使得普通函數也可以訪問封裝在某一類的信息。
*/

class Girl; ///提前聲明Girl類
class Boy{
public:
    Boy(string x, int y, int z):age(z){
        name=x, id=y;
    }
    void prit(Girl &);
    friend void outp(Boy &);            ///Boy的友元函數,是外部函數
    void prit_age();
    ~Boy(){}
private:
    string name;
    int id;
    const int age;                      ///常類型:程序運行期間的常類型數據不能改變
};

class Girl{///補充定義Girl類
public:
    Girl(string x, int y){
        name=x, id=y;
    }
    friend void Boy::prit(Girl &);      ///Girl的友元函數,同時是Boy的成員函數
    ~Girl(){}
private:
    string name;
    int id;
};

void outp(Boy &x){                      ///外部函數:不屬於任何一個類
    Girl g1("Suffy", 456);
    cout<<"The boy's id:"<<x.id<<endl;    //通過外部函數調用Boy類
    cout<<"The boy's name:"<<x.name<<endl<<"Over02\n\n";

    x.prit(g1);                           //通過外部函數調用Boy類中Girl的友元函數來調用Girl的私人成員
}

void Boy::prit(Girl &x){
    cout<<"Boy's id: "<<id<<endl;
    cout<<"Boy's name: "<<name<<endl;
    cout<<"Girl's id: "<<x.id<<endl;
    cout<<"Girl's name: "<<x.name<<endl<<"Over01\n"<<endl;
}
void Boy::prit_age(){
    cout<<name<<"'s age is: "<<age<<endl;
}

void fuction01(){                       ///友元
    Boy b1("Moffy", 123, 18);
    Girl g1("Vicky", 321);
    b1.prit(g1);

    outp(b1);
}
void fuction02(){                       ///常類型
    Boy b1("Lucky", 234, 18);
    b1.prit_age();
}

int main(){
    ///fuction01();
    fuction02();
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章