C++——构造函数和析构函数的调用

时间:2022-02-22 19:26:22

题目:看下列程序输出结果


#include<iostream>using namespace std;

class A
{
public:
A(int n = 2) :m_i(n) {}
~A() { cout << m_i; }

protected:
int m_i;
};

class B :public A {
private:
A m_a1;
A m_a2;
public:
B(int n):m_a2(n),m_a1(m_i+1){}
~B() {
cout << m_i;

--m_i; }
};

int main()
{
B b(5);
return 0;
}

只需要记住一句话:先构造的后析构

构造:
①声明b(5),先构造A,再构造B
②B的构造函数调用了m_a1,m_a2     。  B先声明m_a1,所以先构造A(3),;后声明m_a2,再构造A(5)
③等两个参数都构造好之后,再构造B

构造A(m_i=2)——构造A(3)  (m_i=3)——构造A(5)  (m_i=5)——构造B

析构:
析构B——析构A(5)——析构A(3)——析构A

2 5 3 1