• <small id='xs2h0mpl'></small><noframes id='vec1jsh7'>

    <legend id='vcbqo2h5'><style id='7bqemmgi'><dir id='babptl6a'><q id='npjru2gz'></q></dir></style></legend>

      <bdo id='gcuoq4fs'></bdo><ul id='ddlh92so'></ul>
    <tfoot id='cki43ho2'></tfoot>

    1. <i id='r7amp8c4'><tr id='434n8haf'><dt id='cu6fbhls'><q id='sgkf09c5'><span id='rl0dlypp'><b id='ubsjt2a9'><form id='78ga9y4m'><ins id='bjht79rb'></ins><ul id='4dod28fm'></ul><sub id='cbmq6h7e'></sub></form><legend id='448gph8v'></legend><bdo id='uwol9emb'><pre id='3i8ezok1'><center id='qa1f8u81'></center></pre></bdo></b><th id='vi5m7qlr'></th></span></q></dt></tr></i><div id='ultmkz8a'><tfoot id='fwkj8mrq'></tfoot><dl id='zbky3n4k'><fieldset id='f330v80l'></fieldset></dl></div>
      1. 欢迎来到入门教程网!

        C++

        当前位置:主页 > 软件编程 > C++ >

        &amp;lt;四&amp;gt;构造函数初始化列表

        来源:本站原创|时间:2023-04-02|栏目:C++|点击:

        示例代码1

        点击查看代码
        class CDate{
        
            public:
            CDate(int _year,int _month, int _day){
               this->year=_year;
               this->month=_month;
               this->day=_day;
            }
        
            private:
              int year;
              int month;
              int day;
        };
        
        class Student2{
        
        public:
        
           Student2(const char * _name , int _id, int _year,int _month ,int _day) {
             this.ID=_id;
             strcpy(name,_name);
          }
        
         private:
             char  name[20];
             int   ID;
             CDate age;
        };
        
        
        int main(){
            Student2 s("zhangsan",1001,2022,1,1);
            return 1;
        }
        

        上面代码编译报错,student类对象在初始化的时候,需要初始化成员CDate,但是由于CDate有自定义的构造函数,系统
        找不到无参构造函数,所以报错. 改造代码后如下

        示例代码2

        点击查看代码
        class CDate{
        
            public:
            CDate(int _year,int _month, int _day){
               this->year=_year;
               this->month=_month;
               this->day=_day;
            }
        
            private:
              int year;
              int month;
              int day;
        };
        
        class Student2{
        
        public:
        
           Student2(const char * _name , int _id, int _year,int _month ,int _day) : ID(_id), age(_year,_month,_day){
        
             strcpy(name,_name);
        
          }
        
         private:
             char  name[20];
             int   ID;
             CDate age;
        };
        
        
        int main(){
        
            MyString s1("abcd");
            s1.printChar();
        
            MyString s2=s1;//执行拷贝构造
            s2.printChar();
        
            MyString s3("1234");
            s3=s1;//执行赋值函数
            s3.printChar();
        
            
            return 1;
        }
        

        : ID(_id), age(_year,_month,_day) 构造函数中 冒号右边的 叫做 构造函数初始化列表

        Student2(const char * _name , int _id, int _year,int _month ,int _day) : ID(_id), age(_year,_month,_day){
        strcpy(name,_name);
        }

        Student2(const char * _name , int _id, int _year,int _month ,int _day) : age(_year,_month,_day){
        this.ID=_id
        strcpy(name,_name);

        }

        上面两种方式有什么区别?
        : ID(_id), age(_year,_month,_day) 构造函数初始化列表 中 ID(_id) 相当于 int ID=_id; 定义同时初始化

        Student2(const char * _name , int _id, int _year,int _month ,int _day) {
        this.ID=_id // 这种方式相当于 int ID; ID=_id; 先定义,然后再初始化.
        strcpy(name,_name);
        }

        针对简单内置的基础数据类型这两种方式汇编指令区别不大,但是如果是CDate类类型,如果像下面这样
        Student2(const char * _name , int _id, int _year,int _month ,int _day)
        : ID(_id) ,
        age(_year,_month,_day)
        {
        strcpy(name,_name);
        }

        编译器其实会这样做
        1:CDate age=Date(_year,_month,_day);//定义age对象同时做初始化,并直接指定了构造方式

        如果是下面方式
        Student2(const char * _name , int _id, int _year,int _month ,int _day)
        {
        this->ID=_id;
        this->age=CDate(_year,_month,_day);
        strcpy(name,_name);
        }
        编译器其实会这样做
        1:先创建一个 CDate 对象 age CDate age();//使用无参构造函数
        2:age=CDate(_year,_month,_day);
        上面在第一步的时候,系统调用无参构造函数的时候就报错了,因为没有无参的构造函数.

            <bdo id='gb1rq52b'></bdo><ul id='bal3kalu'></ul>

                <legend id='5ejel9rm'><style id='4dm6voe4'><dir id='36qsgfnu'><q id='d6s82u4w'></q></dir></style></legend>
              1. <tfoot id='vot5ye2u'></tfoot>

                <small id='uqcu8ijm'></small><noframes id='kvzbvaur'>

                  <tbody id='bew6d1a0'></tbody>

                  <i id='gsn330xg'><tr id='8ce9pjr7'><dt id='1rdglbuv'><q id='tq2lwoc3'><span id='vjz2v2ny'><b id='zovtckwt'><form id='5kfdi1vr'><ins id='xq86bubi'></ins><ul id='cdcpgx6n'></ul><sub id='sivz8oji'></sub></form><legend id='kfbybcdy'></legend><bdo id='pv8o1r2n'><pre id='gojm46no'><center id='ooj5gm1m'></center></pre></bdo></b><th id='rq2ngwhu'></th></span></q></dt></tr></i><div id='ogi79hha'><tfoot id='lyuwiu0g'></tfoot><dl id='orl5gbnr'><fieldset id='46nbxkbr'></fieldset></dl></div>

                  上一篇:&amp;lt;三&amp;gt;对象的浅拷贝和深拷贝问题

                  栏    目:C++

                  下一篇:&amp;lt;六&amp;gt;指向类成员的指针

                  本文标题:&amp;lt;四&amp;gt;构造函数初始化列表

                  本文地址:https://www.xiuzhanwang.com/a1/c++/17093.html

                  网页制作CMS教程网络编程软件编程脚本语言数据库服务器

                  如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

                  联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

                  Copyright © 2002-2020 脚本教程网 版权所有

                1. <small id='o5z4s7xi'></small><noframes id='5aqr5yco'>

                  <legend id='v0z8jh01'><style id='mwxto4zj'><dir id='amvriz9g'><q id='4az9y589'></q></dir></style></legend>

                      <bdo id='64t1o25g'></bdo><ul id='dxrtmcrr'></ul>
                    <i id='wc0f5wue'><tr id='iqc3c150'><dt id='26lz6fgc'><q id='f3gsahao'><span id='uvir4078'><b id='23dhryej'><form id='crimy1r9'><ins id='8o3v7hz2'></ins><ul id='0xo7igot'></ul><sub id='6ullqrfh'></sub></form><legend id='2jky22ts'></legend><bdo id='9eaanwec'><pre id='4wc0vgse'><center id='8nq0gzjq'></center></pre></bdo></b><th id='8lwvpr76'></th></span></q></dt></tr></i><div id='0lkffnty'><tfoot id='tpejg1mw'></tfoot><dl id='r89vpvew'><fieldset id='fpw3ps62'></fieldset></dl></div>
                    1. <tfoot id='96kqq9s3'></tfoot>