virtual void func();
,派生类虚函数的原型为virtual void func(int);
,那么当基类指针 p 指向派生类对象时,语句p -> func(100);
将会出错,而语句p -> func();
将调用基类的函数。#include <iostream> using namespace std; //基类Base class Base{ public: virtual void func(); virtual void func(int); }; void Base::func(){ cout<<"void Base::func()"<<endl; } void Base::func(int n){ cout<<"void Base::func(int)"<<endl; } //派生类Derived class Derived: public Base{ public: void func(); void func(char *); }; void Derived::func(){ cout<<"void Derived::func()"<<endl; } void Derived::func(char *str){ cout<<"void Derived::func(char *)"<<endl; } int main(){ Base *p = new Derived(); p -> func(); //输出void Derived::func() p -> func(10); //输出void Base::func(int) p -> func("http://task.lmcjl.com"); //compile error return 0; }在基类 Base 中我们将
void func()
声明为虚函数,这样派生类 Derived 中的void func()
就会自动成为虚函数。p 是基类 Base 的指针,但是指向了派生类 Derived 的对象。p -> func();
调用的是派生类的虚函数,构成了多态。p -> func(10);
调用的是基类的虚函数,因为派生类中没有函数覆盖它。p -> func("http://task.lmcjl.com");
出现编译错误,因为通过基类的指针只能访问从基类继承过去的成员,不能访问派生类新增的成员。
本文链接:http://task.lmcjl.com/news/8636.html