(c++常问问题七)成员变量包含引用类型或者常量

成员变量里面如果包含了引用类型,应该如何初始化此成员变量才不报错

答:需要利用类的初始化列表来构造该成员对象

 

class dog1
{
public:
    dog1(){m_strName = "peter";};
    string m_strName;
};

class cat1
{
public:
//这里用了两种方法来初始引用类型的成员变量,一种是new,一种是上层传入
//注意..如果构造函数直接构造对象并把对象付给成员,构造函数结束时成员指向的对象也被栈回收了,后果很严重,传入引用对象的话请注意好该对象的生命周期

//常量必须通过成员初始化列表来初始化
const int m_cstnMyAge;

cat1(int& nCnt)
:m_friend(*(new dog1())),
m_nfriendCnt(nCnt),
m_cstnMyAge(10)
{
        //...
}
    dog1& m_friend;
    int &m_nfriendCnt;
};

void main()
{
    int nCnt = 1;
    cat1 c1(nCnt);
    cout<<c1.m_friend.m_strName.c_str();//成功输出"peter"
    cout<<c1.m_nfriendCnt;//成功输出1

    system("pause");
} 

 

这里用了两种方法初始引用类型的成员变量,一种是new(析构函数处记得释放..),一种是上层传入(注意该对象的生命周期)..
注意..如果构造函数直接构造对象并把对象付给成员,构造函数结束时成员指向的对象也被栈回收了,后果很严重,传入引用对象的话请注意好该对象的生命周期

 

posted @ 2016-01-28 23:57  Jensen抹茶喵  阅读(263)  评论(0编辑  收藏  举报