c++中构造函数和初始化列表

我不是笔记的创造者,我只是笔记的搬运工~

1 ,构造函数可以重载,也可以带有缺省参数          
    匹配string的无参构造函数
    string s;
    匹配string的有参(const char*)构造函数      
    string s("hello");

2 ,缺省构造函数(无参构造函数)
   1)如果类中没有定义任何构造函数,编译器会为该类提供一个缺省(无参)构造函数:
        --》对于基本类型成员变量不做初始化
        --》对于类 类型的成员变量(成员子对象),将会自动调用相应类的无参构造函数来初始化

   2)如果自己定义了构造函数,无论是否有参数,那么编译器都不会再提供缺省的无参构造函数了.

3 ,类型转换构造函数(单参构造函数) //构造函数的类型转换   
    class 类名{
        //可以将源类型变量转换为当前类类型对象.
        类名(源类型){...}
    };
    -----------------------------------
    class 类名{
        //加“explicit”关键字修饰,可以强制要求这种类型
        //转换必须显式的完成.
        explicit 类名(源类型){...}
    };

4, 拷贝构造函数(复制构造函数) 这部分我觉得还挺难理解的 
1)用一个已存在的对象作为同类对象的构造实参,创建新的副本对象时,会调用该类拷贝构造函数。
    class 类名{
        类名(const 类名&){//拷贝构造
            ...
        }
    };
    ------------
    eg:
    class A{...};
    A a1(...);
    A a2(a1);//匹配A的拷贝构造函数


2)如果一个类没有自己定义拷贝构造函数,那么编译器会为该类提供一个缺省的拷贝构造函数:
--》对于基本类型的成员变量,按字节复制
--》对于类类型的成员变量(成员子对象),将自动调用相应类的拷贝构造函数来初始化

注:一般不需要自己定义拷贝构造函数函数,因为编译器缺省提供的已经很好用了.

    class A1{};//缺省无参,缺省拷贝
    class A2{//缺省拷贝
        A(void){}
    };
    class A3{//缺省拷贝
        A(int){}
    };
    class A4{//没有缺省构造
        A(const A&){}
    };

3)拷贝构造函数调用时机
--》用一个已存在对象作为同类对象的构造实参
--》以对象形式向函数传递参数
--》从函数中返回对象(有可能被编译器优化掉)

发布了9 篇原创文章 · 获赞 6 · 访问量 1995

猜你喜欢

转载自blog.csdn.net/GG802312/article/details/105593406