C/C++教程

C++ day04 类和对象二、实现String类和双向链表习题(有答案)

本文主要是介绍C++ day04 类和对象二、实现String类和双向链表习题(有答案),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、简答题

  1. 当定义类时,编译器会为类自动生成哪些函数?这些函数各自都有什么特点?

    对于一个空类,会自动生成默认构造函数、析构函数、拷贝(复制)构造函数、赋值函数

    类型特点
    构造函数①***没有显示定义析构函数时,编译器会自动为该类型生成默认构造函数,完成对象的初始化,函数名与类名相同、没有返回值、没有返回类型,用来初始化数据成员***
    ②全局对象和静态对象的构造函数在main()函数执行之前就被调用,局部静态对象的构造函数是当程序第一次执行到才被调用
    ③然而一个外部对象的引用性声明时,并不调用相应的构造函数,因为这个外部对象只是引用在其他地方声明的对象,并没有真正地创建一个对象。
    析构函数函数名为~类名、没有返回值、没有返回类型,当程序执行后,系统将自动调用自动创建的析构函数,将对象释放*
    ②默认的析构函数不能删除new在自由存储器中分配的对象和对象成员,需要自己自定义析构函数,然后显示使用delete运算符来释放new运算符分配的内存
    拷贝(复制)析构函数①***默认拷贝构造函数:为新对象分配内存并赋值相应成员变量,函数名与类名相同、没有返回值、没有返回类型、参数为const类&***
    ②显示拷贝构造函数一般要求:
    a)确保作为形参的引用变量(this!=&rhs)
    b)需要释放左操作数,防止内存泄漏
    c)自己显示拷贝要用深拷贝,否则删除被引用的参数,引用的参数就会发生错误
    ③若不主动编写拷贝构造函数和赋值函数,编译器将以"位拷贝"的方式自动生成缺省的函数。倘若类中有指针变量,那么这两个缺省的函数就隐含了错误
    赋值函数〇***函数名为operator=、返回值为类名、参数为const类&,用来对已存在的对象进行赋值***
    ①定义类时引用符号不可以去掉,若去掉会多执行一次拷贝构造函数,效率会降低
    ②不可去掉const,若右操作数是右值(不可取地址),会产生废const左值引用不大于右值的报错
    ③返回类型不能是void型,否则函数连载会发生错误
  2. 什么是左值与右值,拷贝构造函数中的引用与const为什么不能去掉?

    左值:可以取地址,内存中有实际存储

    右值:不能取地址,例如临时对象、匿名对象、临时变量、字面值常量(100)都属于右值

  3. this指针是什么?

    ①指针常量;

    ②用来指向对象本身,隐藏于非静态成员函数的第一个参数位置

  4. 必须在构造函数列表中初始化的3种情况?

这篇关于C++ day04 类和对象二、实现String类和双向链表习题(有答案)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!