C++类的几个细节:友元和默认构造

  1. 如果类中包含内置类型或者复合类型(比如数组或者指针)的成员,则只有当这些成员全部被赋予了类内初始值才适合用默认构造函数,否则,他们的值将是未定义的,这个跟以前的在块内定义的内置类型和复合类型默认初始化会苍生未定义的情况相同。如下

    Person p = Person();
    cout<"年龄"<//age是int类型,属于内置类型,故输出后是未定义的有不确定的值
    cout<"地址"<//address不是内置类型,也不是符合类型,故输出空字符串。

    其输出结果为:C++类的几个细节:友元和默认构造_第1张图片

    可见int型内置类型有未定义的情况。

  2. 友元的声明仅仅制定了访问权限,而非一个通常意义上的一个函数声明,如 果我们希望类的用户能够调用某个友元函数,就必须在友元声明之外(类内那个声明)再专门对函数进行一次声明。如下的read函数:

    
    #include
    
    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函数内都能改变该可变数据的值。

你可能感兴趣的:(C-C++)