#include <iostream.h>
class BASE
{
char c;
public:
BASE(char n):c(n){cout<<c<< endl;}
virtual ~BASE(){cout<<c<< endl;}
public:
virtual void f(void){ cout << "BASE::f() " << endl; }
void g(void){ cout << "BASE::g() " << endl; }
};
class DERIVED:public BASE
{
char c;
public:
DERIVED(char n):BASE(n+1),c(n){cout<<c<< endl;}
~DERIVED(){cout<<c<< endl;}
public:
virtual void f(void){ cout << "DERIVED::f() " << endl; }
void g(void){ cout << "DERIVED::g() " << endl; }
};
int main()
{
DERIVED d('X');
BASE *pb = &d;
DERIVED *pd = &d;
pb->f();
pd->f();
pb->g();
pd->g();
return 0;
}
输出为
Y
X
DERIVED::f()
DERIVED::f()
BASE::g()
DERIVED::g()
X
Y
在开始时 是先构造 基类还是先构造派生类?
而虚函数的作用是什么?
參考答案:1先调用基类的构造函数,然后调用派生类的构造函数
2 虚函数的作用主要是想实现面向对象的多态
为什么调用pb->f();时调用的是派生类的成员函数?
答: 因为f()这个函数为虚函数并且pb这个指针指向了派生类对象,按照虚函数规则当然是调用派生类的函数了
既然是先构造基类 那为什么先输出Y?应该先输出X啊!
答:之所以先输出是因为先构造基类
注意这句DERIVED(char n):BASE(n+1),c(n){cout<<c<< endl;}
传入为x ,但是n + 1 后,当然是y了
学编程要注重细节