虚函数的使用 虚函数是动态联编的基础。 是非静态的成员函数。 在类的定义中,在函数原型之前写 virtual virtual只用来说明类定义中的原型,不能用在函数实 现时。 具有继承性,基类中定义了虚函数,派生类中无论是 否说明,同原型函数都自动为虚函数 本质:不是重载定义而是覆盖定义。 调用方式:通过基类指针或引用,执行时会 根据指针指向的对象的类,决定调用哪个函数
◼ 虚函数是动态联编的基础。 ◼ 是非静态的成员函数。 ◼ 在类的定义中,在函数原型之前写virtual。 ◼ virtual 只用来说明类定义中的原型,不能用在函数实 现时。 ◼ 具有继承性,基类中定义了虚函数,派生类中无论是 否说明,同原型函数都自动为虚函数。 ◼ 本质:不是重载定义而是覆盖定义。 ◼ 调用方式:通过基类指针或引用,执行时会 根据指针指向的对象的类,决定调用哪个函数。 虚函数的使用
士写出运行结果 #include iostream. h> class bo∥类声明 public:∥外部接口 virtual void display)∥虚成员函数 scout<<B0: display"<<endl;
写出运行结果 #include class B0 //基类声明 { public: //外部接口 virtual void display() //虚成员函数 {cout<<"B0::display()"<<endl;} };
class b1: public bo∥公有派生 i public void display i cout<<Bl: display( "endl class dl: public bl∥公有派生 i public void display i cout<< DI: display"<<endl
class B1: public B0 //公有派生 { public: void display() { cout<<"B1::display()"<<endl; } }; class D1: public B1 //公有派生 { public: void display() { cout<<"D1::display()"<<endl; } };
void fun(BO*ptr)/普通函数 i ptr->display: j void maino∥主函数 B0Ob0,*p;∥声明基类对象和指针 Blbl;∥声明派生类对象 D1d1;/声明派生类对象 p=&bo fun(p),∥调用基类BO函数成员 p=&bl fun(p);∥调用派生类B1函数成员 p=&dI fun(p);∥调用派生类D1函数成员
void fun(B0 *ptr) //普通函数 { ptr->display(); } void main() //主函数 { B0 b0, *p; //声明基类对象和指针 B1 b1; //声明派生类对象 D1 d1; //声明派生类对象 p=&b0; fun(p); //调用基类B0函数成员 p=&b1; fun(p); //调用派生类B1函数成员 p=&d1; fun(p); //调用派生类D1函数成员 }
程序的运行结果为: BO: display ■B1: display( D1: display o
◼ 程序的运行结果为: ◼ B0::display() ◼ B1::display() ◼ D1::display()
虚函数与构造函数 虚函数用于实现不同对象有不同的行为, 是实现运行时多态的基础,是针对对象 而言的 而构造函数是在对象尚未完全建立起来 的时候执行的。因此将构造函数声明为 虚函数是没有意义的
◼ 虚函数用于实现不同对象有不同的行为, 是实现运行时多态的基础,是针对对象 而言的。 ◼ 而构造函数是在对象尚未完全建立起来 的时候执行的。因此将构造函数声明为 虚函数是没有意义的。 虚函数与构造函数