看下面一段代码
B:public A
{
public:
B();
~B();
C c;
}
那么A的构造函数,B的构造函数,还有C的构造函数的执行顺序是什么呢?
通过一段代码验证即可,通过验证可得执行顺序为A->C->B
验证代码同时验证了派生类重写基类的函数的情形
Base类
Base.h
#pragma once
#include <string>
using namespace std;
class Base
{
public:
Base(void);
~Base(void);
void printInfo();
void printBase(string str);
};
Base.cpp
#include "StdAfx.h"
#include "Base.h"
#include <iostream>
using namespace std;
Base::Base(void)
{
cout << "基类的构造函数" << endl;
}
Base::~Base(void)
{
}
void Base::printInfo()
{
cout << "父类的printInfo函数被调用" << endl;
}
void Base::printBase(string str)
{
cout << "父类的printBase函数被调用:" + str << endl;
}
Derived.h
#pragma once
#include "Base.h"
#include "ThirdClass.h"
class Derived : public Base
{
public:
Derived(void);
~Derived(void);
void printInfo();
void printDerived();
ThirdClass thirdClass;
};
Derived.cpp
#include "StdAfx.h"
#include "Derived.h"
#include <iostream>
using namespace std;
Derived::Derived(void)
{
cout << "子类的构造函数" << endl;
}
Derived::~Derived(void)
{
}
void Derived::printInfo()
{
cout << "子类的printInfo函数被调用" << endl;
}
void Derived::printDerived()
{
cout << "进入printDrived,下面输出父类的printInfo(已被子类重写)" << endl;
Base::printInfo();
cout << "输出父类的printBase(未被子类重写)" << endl;
printBase("Hello World");
cout << "从printDrived中退出" << endl;
}
ThirdClass.h
#pragma once
class ThirdClass
{
public:
ThirdClass(void);
~ThirdClass(void);
public:
};
ThirdClass.cpp
#include "StdAfx.h"
#include "ThirdClass.h"
#include <iostream>
using namespace std;
ThirdClass::ThirdClass(void)
{
cout << "派生类中对象的初始化" << endl;
}
ThirdClass::~ThirdClass(void)
{
}
main函数
#include "stdafx.h"
#include "stdlib.h"
#include "Base.h"
#include "Derived.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Base base;
cout << "下面生成一个派生类对象" << endl;
Derived derived;
cout << "下面输出base.printInfo" << endl;
base.printInfo();
cout << "下面输出base.printBase(\"Hello World\")" << endl;
base.printBase("Hello World");
cout << "下面输出derived.printInfo" << endl;
derived.printInfo();
cout << "下面输出derived.printbase" << endl;
derived.printBase("Hello World");
cout << "下面输出derived.printDerived" << endl;
derived.printDerived();
system("pause");
return 0;
}