C++類的幾個細節:友元和默認構造

  1. 如果類中包含內置類型或者複合類型(比如數組或者指針)的成員,則只有當這些成員全部被賦予了類內初始值才適合用默認構造函數,否則,他們的值將是未定義的,這個跟以前的在塊內定義的內置類型和複合類型默認初始化會蒼生未定義的情況相同。如下

    Person p = Person();
    cout<<p.age<<"年齡"<<endl;        //age是int類型,屬於內置類型,故輸出後是未定義的有不確定的值
    cout<<p.address<<"地址"<<endl;  //address不是內置類型,也不是符合類型,故輸出空字符串。

    其輸出結果爲:這裏寫圖片描述

    可見int型內置類型有未定義的情況。

  2. 友元的聲明僅僅制定了訪問權限,而非一個通常意義上的一個函數聲明,如 果我們希望類的用戶能夠調用某個友元函數,就必須在友元聲明之外(類內那個聲明)再專門對函數進行一次聲明。如下的read函數:

    
    #include<string>
    
    using namespace std;
    class Person
    {
    friend Person &read(istream &is,Person &p);//此處聲明只是生命了訪問的權限。
    public:
    string name;
    string address;
    
    public:
    const string& getName()const;
    const string& getAddress()const;
    istream &read(istream &is,string& s);
    ostream&out(ostream& os,string& s);
    
    public:
    Person(const string &s1,const string &s2):name(s1),address(s2){}
    Person(void);
    ~Person(void);
    };
    Person &read(istream &is,Person &p);  //類外又聲明瞭一次
  3. mutable聲明限定了該數據成員是可變成員,任何成員函數包括const函數內都能改變該可變數據的值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章