C++ day04 类和对象二、实现String类和双向链表习题(有答案)
作者:互联网
一、简答题
-
当定义类时,编译器会为类自动生成哪些函数?这些函数各自都有什么特点?
对于一个空类,会自动生成默认构造函数、析构函数、拷贝(复制)构造函数、赋值函数
类型 特点 构造函数 ①***没有显示定义析构函数时,编译器会自动为该类型生成默认构造函数,完成对象的初始化,函数名与类名相同、没有返回值、没有返回类型,用来初始化数据成员***
②全局对象和静态对象的构造函数在main()函数执行之前就被调用,局部静态对象的构造函数是当程序第一次执行到才被调用
③然而一个外部对象的引用性声明时,并不调用相应的构造函数,因为这个外部对象只是引用在其他地方声明的对象,并没有真正地创建一个对象。析构函数 ①函数名为~类名、没有返回值、没有返回类型,当程序执行后,系统将自动调用自动创建的析构函数,将对象释放*
②默认的析构函数不能删除new在自由存储器中分配的对象和对象成员,需要自己自定义析构函数,然后显示使用delete运算符来释放new运算符分配的内存拷贝(复制)析构函数 ①***默认拷贝构造函数:为新对象分配内存并赋值相应成员变量,函数名与类名相同、没有返回值、没有返回类型、参数为const类&***
②显示拷贝构造函数一般要求:
a)确保作为形参的引用变量(this!=&rhs)
b)需要释放左操作数,防止内存泄漏
c)自己显示拷贝要用深拷贝,否则删除被引用的参数,引用的参数就会发生错误
③若不主动编写拷贝构造函数和赋值函数,编译器将以"位拷贝"的方式自动生成缺省的函数。倘若类中有指针变量,那么这两个缺省的函数就隐含了错误赋值函数 〇***函数名为operator=、返回值为类名、参数为const类&,用来对已存在的对象进行赋值***
①定义类时引用符号不可以去掉,若去掉会多执行一次拷贝构造函数,效率会降低
②不可去掉const,若右操作数是右值(不可取地址),会产生废const左值引用不大于右值的报错
③返回类型不能是void型,否则函数连载会发生错误 -
什么是左值与右值,拷贝构造函数中的引用与const为什么不能去掉?
左值:可以取地址,内存中有实际存储
右值:不能取地址,例如临时对象、匿名对象、临时变量、字面值常量(100)都属于右值
-
this指针是什么?
①指针常量;
②用来指向对象本身,隐藏于非静态成员函数的第一个参数位置
-
必须在构造函数列表中初始化的3种情况?
标签:tmp,Node,String,pstr,int,链表,习题,data 来源: https://blog.csdn.net/weixin_43679037/article/details/116888370