• C++11特性-初始化


    1.构造函数

            1.委托构造函数:允许同一个类的构造函数调用其他构造函数,简化变量初始化

    1. class BB
    2. {
    3. public:
    4. BB() {}
    5. BB(int max) {
    6. this->m_max = max > 0 ? max : 100;
    7. cout << "max = " << this->m_max << endl;
    8. }
    9. BB(int max,int min):BB(max) {
    10. this->m_min = min > 0 && min < max ? min : 1;
    11. cout << "min = " << this->m_min << endl;
    12. }
    13. BB(int max ,int min ,int mid) :BB(max,min){
    14. this->m_mid = mid > min && mid < max ? mid : 100;
    15. cout << "mid = " << this->m_mid << endl;
    16. }
    17. int m_max;
    18. int m_min;
    19. int m_mid;
    20. };

                    不能形成闭环,只能形成链路

                    只能使用初始化成员列表的方式调用,否则编译器会报错(形参的重定义)

                    在初始化列表中调用委托构造函数初始化某个参数后,就不能在成员初始化列表中再初始化这个参数

                    

            2.继承构造函数:子类可以直接继承父类的构造函数

    1. class BBB :public BB
    2. {
    3. public:
    4. using BB::BB;//子类可以使用父类的所有构造函数
    5. using BB::func;//子类可以使用父类隐藏的函数
    6. void func() {
    7. cout << " BBB func = " << endl;
    8. }
    9. };

    2.初始化列表{}

            对象\变量\指针 {}        对象\变量\指针  = {}

            聚合类型可以使用初始化列表相当于给每个元素分别赋值;对于非聚合类型,则需要定义一个合适的构造函数,此时使用初始化列表会调用它对应的构造函数。

            聚合类:

                    普通数组可以看做一个聚合体

                    无基类、无虚函数、无用户自定义的构造函数、无私有或者受保护的非静态数据成员、无{}或=直接初始化非静态数据成员(c14支持)的类(class、struct、union)           

    1. //类中有私有或者受保护静态成员可以使用初始化列表,但是静态成员不能使用初始化列表
    2. struct T2 {
    3. int a;
    4. int b;
    5. protected:
    6. static int c;
    7. }t2{ 12,19 };
    8. int T2::c = 10;

            非聚合类:需要使用类构造函数来初始化私有变量

    1. class ListInit
    2. {
    3. public:
    4. ListInit(int num) :m_num(num) {
    5. cout << "m_num = " << this->m_num << endl;
    6. }
    7. ListInit(int num,string str):m_num(num),m_str(str) {
    8. cout << "m_num = " << this->m_num << " ,m_str = " << m_str << endl;
    9. }
    10. private:
    11. int m_num;
    12. string m_str;
    13. };

             聚合类型定义并非递归的,需要看实际情况判断      

    1. struct T3
    2. {
    3. int a = 3;
    4. int b[3]{1,2,2};
    5. int c;
    6. T2 tt2;
    7. };
    8. //初始化列表
    9. T3 t4{ 44,{11,22,33},99,{} };

    3.initializer_list

            initializer_list(轻量级类模板)一般作为参数传递

            初始化时使用初始化列表{}初始化(只能把{}看做一个整体来初始化或者赋值)

            其作用是定义一个可以接受任意相同类型个数的参数的函数

    1. void test_initializer_list(initializer_list<int> ls) {
    2. auto it = ls.begin();
    3. for (;it != ls.end();++it) {
    4. cout << *it << " ";
    5. }
    6. cout << endl;
    7. }
    8. //调用
    9. test_initializer_list({1,2,3,4,56,67,7});
  • 相关阅读:
    JS构造函数与class类中的封装、继承和多态
    Java面向对象编程
    c++视觉处理----分水岭算法
    Android 9.0 AOSP源码目录介绍
    javax.servlet.ServletException: 非法访问资源(/j_spring_security_check)
    计算机毕业设计ssm+vue基本微信小程序的南通农商银行微银行系统
    华硕主板开启核显
    神经网络量化----为了部署而特别设计
    Stream流 - 聚合操作和遍历操作
    最新外链系统强势来袭
  • 原文地址:https://blog.csdn.net/weixin_44840658/article/details/128195423