题目:看下列程序输出结果
#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