基类和派生类构造函数函数执行顺序

看下面一段代码
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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值