派生类实例化一个对象的时候,先调用基类的构造函数,然后再调用派生类的构造函数。指向派生类的基类指针,在调用基类的虚函数时需注意,派生类是否有对基类的虚函数覆写操作,如果有,则会执行派生类覆写的代码,实现多态的效果。
代码如下:
#include "stdafx.h"
#include <iostream>
#pragma warning(disable:4996)
#include <string>
using namespace std;
class base{
public:
base(){
cout << "base::base()" << endl;
print();
}
void fun1(void){
cout << "void base::fun1(void)" << endl;
print();
}
virtual void print(void){
cout << "virtual void base::print(void)" << endl;
}
};
class child:public base
{
public:
child(){
cout << "child::child()" << endl;
print();
}
virtual void print(void){
cout << "virtual void child::print(void)" << endl;
}
};
int main(int argc, char *argv[])
{
child test;//先调用基类的构造函数,然后再调用派生类的构造函数
cout << "*************************************" << endl;
base *pa = &test;
pa->fun1();//执行基类的成员函数fun1,由于在派生类中覆写了基类的虚函数print,所以fun1中的print执行的就是派生类中的代码
return 0;
}
结果如下: