类和对象3

//class Date
//{
//public:
//    //建议尽量使用初始化列表初始化
//    //成员变量的定义放在初始化列表里,每个成员变量都会走初始化列表,初始化列表里不写也会走
//    //没写就走默认构造(不传参数就能调用的),要是连默认构造都没有,就会报错
//
//    //初始化列表初始化的顺序按照声明里给的顺序,与初始化列表里的顺序无关
//    Date(int year = 1, int month = 1, int day = 1)
//        //上面的缺省值用不用取决于我传不传实参
//        :_year(year)//初始值或者表达式
//        , _month(month)//每个成员变量只能初始化一次
//        , _day(day)
//        , _n(1)//const类型的成员变量只能在初始化列表初始化
//        , _ref(year)//const和引用成员必须初始化
//        , _ptr((int*)malloc(12))
//        //对于没有在初始化列表出现的自定义类型成员,编译器会调用他的默认构造,
//        // 若是没有默认构造,则会爆错
//    {
//        if (_ptr == nullptr)
//        {
//            perror("malloc fail");
//        }
//    }
//private:
//    //声明,缺省值->初始化列表用的
//    // 每个构造函数都有初始化列表
//    //声明——C++规定声明的顺序也是在内存中存放的顺序
//    int _year = 1;
//    int _month = 1;
//    int _day;
//    const int _n;//const只有一次复制的机会,只能在定义的地方初始化
//    int& _ref;//引用成员也必须在初始化列表初始化
//    int* _ptr;
//    //初始化列表->缺省值(不是在构造函数里写的,是在声明这个地方)->内置类型(不确定是否初始化》/自定义类型(调用对应的默认构造)
//    //三类必须在初始化列表初始化的:const、没有默认构造的自定义类型、引用
//};
//
//int main()
//{
//    //对象定义
//    Date d1(2025, 7, 2);//构造函数完成的事情是定义,开空间在调用函数开辟栈帧的时候就已经完成
//    d1.Print();
//    return 0;
//}

//静态成员变量,一定要在类外进行初始化
//存在静态区,是所有类对象共享
//静态成员函数没有this指针
// 静态成员函数可以访问其他静态成员,但是不能访问替他非静态的,因为没有静态指针
// 非静态的成员函数可以访问任意静态成员
// 突破类域就可以访问静态对象,具体方法有类名::静态成员,或者对象.静态成员
假设已经有A 、 B、 C、 D 四个类,则以下程序构造函数调用的顺序是cabd
// 析构函数调用的顺序是badc——后构造的先析构
//C c
//int main()
//{
//    A a;
//    B b;
//    static D d;所有放在静态区的对象,都是在程序运行到所在位置时才进行初始化
//    return 0;
//}

//友元
// 可以是其他类,这样这个类中的成员函数就都可以访问将它视为友元的类的private数据
// 具有单向性和不可传递性
// 
// 
// 内部类
//    是在一个类里定义的另一个类,是包含它的类的友元,并且受到包含他的类的访问限制(要先访问外面的在访问里面的)
//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值