技术开发 频道

C++中类的多态与虚函数的使用


【IT168技术文档】

  多态的这个概念稍微有点模糊,如果想在一开始就想用清晰用语言描述它,让读者能够明白,似乎不太现实,所以我们先看如下代码:
//例程1 #include <iostream> using namespace std; class Vehicle { public: Vehicle(float speed,int total) { Vehicle::speed=speed; Vehicle::total=total; } void ShowMember() { cout<<speed<<"|"<<total<<endl; } protected: float speed; int total; }; class Car:public Vehicle { public: Car(int aird,float speed,int total):Vehicle(speed,total) { Car::aird=aird; } void ShowMember() { cout<<speed<<"|"<<total<<"|"<<aird<<endl; } protected: int aird; }; void main() { Vehicle a(120,4); a.ShowMember(); Car b(180,110,4); b.ShowMember(); cin.get(); }
  在c++中是允许派生类重载基类成员函数的,对于类的重载来说,明确的,不同类的对象,调用其类的成员函数的时候,系统是知道如何找到其类的同名成员,上面代码中的a.ShowMember();,即调用的是Vehicle::ShowMember(),b.ShowMember();,即调用的是Car::ShowMemeber();。

  但是在实际工作中,很可能会碰到对象所属类不清的情况,下面我们来看一下派生类成员作为函数参数传递的例子,代码如下:
//例程2 #include <iostream> using namespace std; class Vehicle { public: Vehicle(float speed,int total) { Vehicle::speed=speed; Vehicle::total=total; } void ShowMember() { cout<<speed<<"|"<<total<<endl; } protected: float speed; int total; }; class Car:public Vehicle { public: Car(int aird,float speed,int total):Vehicle(speed,total) { Car::aird=aird; } void ShowMember() { cout<<speed<<"|"<<total<<"|"<<aird<<endl; } protected: int aird; }; void test(Vehicle &temp) { temp.ShowMember(); } void main() { Vehicle a(120,4); Car b(180,110,4); test(a); test(b); cin.get(); }
0
相关文章