C++构造函数初始化列表、流重载

初始化列表

        冒号:开头 逗号,分隔 大括号{}结尾,初始化列表中的值优先于缺省值,且初始化的顺序和列表无关,顺序基于private中声明的顺序,如果初始化顺序错误可能会导致得到随机值。

        必须在初始化列表初始化的类型有const型变量,重载类型变量和自定义变量

例如:

Test* operator&()//取地址重载
    {
        return this;
    }
private:
    const int x;
    int& _ref;

        x和_ref必须在初始化列表中初始化

class Test
{
public:
    //tip:加上explicit = 不允许隐式转换
    Test()//初始化列表  冒号: 开头 逗号,分隔 大括号{}结尾
        :_a1(20)//有初始化列表中的值后就用列表中的 不用缺省
        ,_a2(30)
        ,x(1)
        ,_ref(_a1)
        //tip:初始化顺序和列表无关 和声明顺序有关
        //     如果初始化顺序错误,会得到随机值
    {
        _a1++;
        _a2--;
        cout << "Test()初始化列表" << endl;
    }
    void Print() const//const修饰 *this
    {
        cout << _a1 << endl;
    }
    Test* operator&()//取地址重载
    {
        return this;
    }
    const Test* operator&() const//取地址const重载
    {
        return this;
    }
private:
    //必须在初始化列表写的 _ref x 自定义类型
    int _a1=10;//缺省
    int _a2;
    const int x;
    int& _ref;
};
int test7()//初始化列表
{
    const Test a;
    a.Print();//是一个权限展开 要用const修饰 *this
    cout << &a <<endl;

    //Test a=1;//单参数构造函数支持隐式转换 多参数构造函数不支持
    //Test a={1,2,3}; //多参数构造函数C++11后支持
    return 0;
}

静态成员和匿名对象

        1、静态成员函数没有this指针 和静态成员类型搭配使用

        2、静态成员不属于某个对象 属于所有对象 属于整个类

        3、声明时不能缺省初始化或在初始化列表中初始化,必须全局初始化

        匿名对象:指没有被实例化的类,如:类名为Test,那么它的匿名对象就是Test();它的生命周期只有使用的那一行,结束即删除。

class T8
{
public:
    T8()
    {
        cout << "T8()" << endl;
        ++count;
    }
    T8(const T8& a)
    {
        ++count;
    }
    static int GetCount()//静态成员函数没有this指针  和静态成员类型搭配使用
    {
        //_a++;//不能访问非静态成员
        return count;
    }

    ~T8()
    {
        cout << "~T8()" <<endl;
    }
private:
    //不属于某个对象 属于所有对象 属于整个类
    static int count; //声明 不能缺省初始化或在初始化列表中初始化
    int _a=1;
};
int T8::count=0;//全局初始化
int test8()
{
    T8 aa;
    cout << T8::GetCount() << endl;
    T8();//匿名对象 生命周期只在这一行

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值