有关c++的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 16:55:47
#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()

1先调用基类的构造函数,然后调用派生类的构造函数
2 虚函数的作用主要是想实现面向对象的多态
为什么调用pb->f();时调用的是派生类的成员函数?
答: 因为f()这个函数为虚函数并且pb这个指针指向了派生类对象,按照虚函数规则当然是调用派生类的函数了

既然是先构造基类 那为什么先输出Y?应该先输出X啊!
答:之所以先输出是因为先构造基类
注意这句DERIVED(char n):BASE(n+1),c(n){cout<<c<< endl;}
传入为x ,但是n + 1 后,当然是y了
学编程要注重细节

当然是先构造基类了,没有基类怎么会有派生类?虚函数的作用是实现滞后联编

基类
虚函数是为了实现多态
例如
class Animal { virtual void draw(); };
class Dog : public Animal { void draw(); };
class Cat : public Animal { void draw(); };

Animal *a = new Dog;
Animal *b = new Cat;
a->draw();//会调用Dog::draw()
b->draw();//会调用Cat::draw()