知识回顾:
this->成员访问当前对象的成员(如this->a = 10;,a 是类的成员变量);return *this;,实现链式调用)。类类型* const(普通成员函数)或const 类类型* const(const 成员函数),不可修改指向。1、下面描述错误的是() A.this指针是非静态成员函数的隐含形参 B.每个非静态的成员函数都有一个this指针 C.this指针是存在对象里面的 D.this指针可以为空 答案:C 解析: A:静态成员函数没有this指针,只有非静态成员函数才有,且为隐藏指针 B:非静态成员函数的第一个参数就是隐藏的this指针 C:this指针在非静态的成员函数里面,对象不存在,故错误 D:单纯的对this赋空是不可以的,不过可以强转直接赋空,不过一般不进行这样的操作
知识回顾:
class 类名 { 类名(参数列表) { 初始化逻辑 } };(如class Person { Person(int age) { this->age = age; } };);Person p(20);,创建 p 时触发构造函数)。void都不写),可重载(多个构造函数参数列表不同);1、下列关于构造函数的描述正确的是() A.构造函数可以声明返回类型 B.构造函数不可以用private修饰 C.构造函数必须与类名相同 D.构造函数不能带参数 答案:C 解析: A:构造函数不能有返回值,包括void类型也不行 B:构造函数可以是私有的,只是这样之后就不能直接实例化对象 C:这是他的定义 D:构造函数不光可以带参数,还可以有多个构造函数构成重载
知识回顾:
~,用于对象销毁时自动清理资源(释放内存、关闭文件等)。class 类名 { ~类名() { 清理逻辑 } };(如class Person { ~Person() { delete[] name; } };);1、在函数F中,本地变量a和b的构造函数(constructor)和析构函数(destructor)的调用顺序是() Class A; Class B; void F() { A a; B b; } A.b构造 a构造 a析构 b析构 B.a构造 a析构 b构造 b析构 C.b构造 a构造 b析构 a析构 D.a构造 b构造 b析构 a析构 答案:D 解析: A:构造顺序是按照语句的顺序进行构造,析构是按照构造的相反顺序进行析构,因此先构造b,故错误 B:a析构的时机不对,对象析构要在生存作用域结束的时候才进行析构,因此先析构a错误 C:b的构造时机错误,先构造a D:正确,构造顺序是按照语句的顺序进行构造,析构是按照构造的相反顺序进行析构
2、设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为() C c; int main() { A a; B b; static D d; return 0; } A.D B A C B.B A D C C.C D B A D.A B D C 答案:B 解析: 1、类的析构函数调用一般按照构造函数调用的相反顺序进行调用,但是要注意static对象的存在, 因为static改变了对象的生存作用域,需要等待程序结束时才会析构释放对象 2、全局对象先于局部对象进行构造 3、局部对象按照出现的顺序进行构造,无论是否为static 4、所以构造的顺序为 c a b d 5、析构的顺序按照构造的相反顺序析构,只需注意static改变对象的生存作用域之后,会放在局部 对象之后进行析构 6、因此析构顺序为B A D C