64,641
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class A
{
public :
A(int i = 0)
{
m_i = i;
cout << m_i <<endl;
cout << "A::A()" << endl;
}
~A(){ cout << m_i <<endl << "A::~A()\n";}
void f(){cout << m_i <<endl << "A::f()\n";}
private:
int m_i;
};
class B:public A
{
public:
A m_A;
B(int i):m_A(i)
{
cout << "B::B()\n";
}
~B(){cout << "B::~B()\n";}
void f(){cout << "B::f()\n";}
};
int main( void )
{
//调用B的构造函数,因为B的基类是A,所以
//1.先调A的构造函数,
//2.初始化B的成员变量m_A (B(int i):m_A(i) 冒号后面的部分)
//3.然后才调B的构造函数。
//但是A的构造函数是隐式调用,未传参数,使用默认参数0
//输出:
// 0
// A::A()
// 10
// A::A()
// B::B()
A *pa = new B(10);
//执行A::f() (因为A::f()不是虚函数)
//输出:
// 0
// A::f()
pa->f();
//执行A::~A() (因为A::~A()不是虚函数)
//输出:
// 0
// A::~A()
delete pa;
}