欢迎来到天天文库
浏览记录
ID:62037240
大小:18.20 KB
页数:3页
时间:2021-04-15
《C中成员变量初始化有两种方式的区别.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++中成员变量初始化有两种方式的区别构造函数初始化列表和构造函数体内赋值两种方式有何不同?成员变量初始化的顺序是按照在类中定义的顺序。1内部数据类型(char,int……指针等)classAnimal{public:Animal(intweight,intheight)://A初始化列表m_weight(weight),m_height(height){}Animal(intweight,intheight)//B函数体内初始化{m_weight=weight;m_height=height;}private:intm_weigh
2、t;intm_height;};对于这些内部类型来说,基本上是没有区别的,效率上也不存在多大差异。当然A和B方式不能共存的。2无默认构造函数的继承关系中classAnimal{public:Animal(intweight,intheight)://没有提供无参的构造函数m_weight(weight),m_height(height){}private:intm_weight;intm_height;};classDog:publicAnimal{public:Dog(intweight,intheight,inttype)//e
3、rror构造函数父类Animal无合适构造函数{}private:intm_type;};这种必须在派生类中构造函数中初始化提供父类的初始化,因为对象构造的顺序是:父类——子类——……所以必须:classDog:publicAnimal{public:Dog(intweight,intheight,inttype):Animal(weight,height)//必须使用初始化列表增加对父类的初始化{;}private:intm_type;};3类中const常量,必须在初始化列表中初始,不能使用赋值的方式初始化classDog:pu
4、blicAnimal{public:Dog(intweight,intheight,inttype):Animal(weight,height),LEGS(4)//必须在初始化列表中初始化{//LEGS=4;//error}private:intm_type;constintLEGS;};4包含有自定义数据类型(类)对象的成员初始化classFood{public:Food(inttype=10){m_type=10;}Food(Food&other)//拷贝构造函数{m_type=other.m_type;}Food&operat
5、or=(Food&other)//重载赋值=函数{m_type=other.m_type;return*this;}private:intm_type;};(1)构造函数赋值方式初始化成员对象m_foodclassDog:publicAnimal{public:Dog(Food&food)//:m_food(food){m_food=food;//初始化成员对象}private:Foodm_food;};//使用Foodfd;Dogdog(fd);//Dogdog(fd);结果:先执行了对象类型构造函数Food(inttype=10
6、)——>然后在执行对象类型构造函数Food&operator=(Food&other)想象是为什么?(2)构造函数初始化列表方式classDog:publicAnimal{public:Dog(Food&food):m_food(food)//初始化成员对象{//m_food=food;}private:Foodm_food;};//使用Foodfd;Dogdog(fd);//Dogdog(fd);结果:执行Food(Food&other)拷贝构造函数完成初始化不同的初始化方式得到不同的结果:明显构造函数初始化列表的方式得到更高的效
7、率。
此文档下载收益归作者所有