C++类和对象(3)

1.初始化列表

        实现构造函数时,除了在函数体内赋值之外,还有一种初始化的方法,即初始化列表,以一个冒号开始,逗号分隔,中间为“成员变量(初始值)”,初始化列表是每个成员变量初始化的地方,每个成员都要走初始化列表,每个成员变量在初始化列表中只能出现一次,引用成员变量,const成员变量,无默认构造的类类型变量,都必须放在初始化列表中显示初始化

struct Data
{
    //初始化列表
    Data(int a=10,int b=10)
        :_a(a),
         _b(b)
    {

    }


    int _a;
    int _b;
};

        初始化列表按照成员变量在类中的声明顺序进行初始化,和成员在初始化列表中出现的顺序无关,比如下面这段代码:

struct Data
{
    //初始化列表
    Data()
        :_b(10),
         _a(_b)
    {

    }


    int _a;
    int _b;
};




int main()
{
    Data d;
    cout << d._a <<endl;
    cout << d._b << endl;

    return 0;
}

        打印出的将会是一串随机数和10,因为按照初始化顺序,在_a初始化时_b还没有初始化

2.static成员

        由static修饰的成员变量,称为静态成员变量,只能在类外进行初始化,为所有对象共享,不存在于对象中,仅存放于静态区,由static修饰的成员函数,称为静态成员函数,无this指针,因此只能访问其他静态成员和静态函数,不可以访问非静态的,通过类名::静态成员,对象.静态成员来访问静态成员变量和静态成员函数

struct Data
{
    //初始化列表
    Data()
        :_b(10),
         _a(_b)
    {

    }


    int _a;
    int _b;

    //静态成员变量
    static int num;


    static void sayHello()
    {

        cout << "Hello World!" << endl;
    }
    

};

//只能在类外部初始化
int Data::num = 10;

int main()
{
    
    Data d;
    
    //调用静态成员
    cout << Data::num << endl;
    cout << d.num << endl;
    Data::sayHello();
    d.sayHello();

    
    return 0;
}

3.友元声明

        添加friend在函数声明和类声明前,并放在类中以创建这个类的友元类和友元函数,友元类和友元函数可以访问该类中的说有变量和函数,不受访问修饰符限制友元类具有单向不可传递的关系,即a是b的友元,但b不一定是a的友元

struct Data
{
    //进行友元声明
    friend int GetC(Data d);


    //初始化列表
    Data()
        :_b(10),
         _a(10)
    {

    }


    int _a;
    int _b;

    
private:
    int _c = 10;
    int _d = 10;


};

int GetC(Data d)
{
    //通过友元声明获取了_c
    return d._c;
}

3.内部类

        将一个类定义在另一个类的内部,这个类称之为内部类,内部类仍是一个独立的类,仅受外部类类域和访问修饰符影响,在外部类的对象中是不存在这个类的,内部类默认为外部类的友元类

struct Data
{
    int _b;

    //定义内部类
    struct InnerData
    {
        int _a = 0;
        
        void say(Data d)
        {
            //内部类默认为外部类的友元类
            cout << d._c << endl;

        }

    };

private:
    int _c;

};

int main()
{
    //创建内部类
    Data::InnerData d;


    return 0;
}

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值