注册 登录
编程论坛 C++教室

多态性的实现

hmsabc 发布于 2010-08-10 19:13, 410 次点击
程序代码:
//基类与派生类中有同名函数
/*
在下面的程序中 Student  是基类,Graduate 是派生类,它们都有 display 这个同名的函数 */
#include <iostream>
#include <string>
using namespace std;

//声明基类 Student
class Student
{
public:
    Student( int, string,float);                         //声明构造函数
   
//void display( );                                   //声明输出函数
    virtual void display( );                             //声明虚函数

protected:                                               //受保护成员,派生类可以访问
    int num;
    string name;
    float score;
};

//Student 类成员函数的实现
Student::Student( int n,string nam,float s)              //定义构造函数
{ num = n;name = nam; score = s;}


void Student::display( )                                 //定义输出函数
{
    cout<<"num:"<< num << "\nname:"<< name<<"\nscore:" << score << "\n\n";}

//声明公用派生类 Graduate
class Graduate:public Student
{
public:
    Graduate( int, string,float,float);                   //声明派生类构造函数
    virtual void display( );             //声明输出函数,根据C++规定,这里的 display 函数自然成为虚函数
                                         
// “ virtual ”可加可不加
private:
    float pay;
};

//Graduate 类成员函数的实现
void Graduate::display( )                                   //定义输出函数
{
    cout<<"num:"<< num << "\nname:" << name << "\nscore: "<<score <<"\npay = " <<pay <<endl;}

Graduate::Graduate( int n, string nam, float s, float p):Student( n,nam,s),pay(p){ }        //派生类构造函数初始化

//主函数
int main( )
{
    Student stud1(1001,"Li",87.5);                         //定义 Student 类对象 stud1
    Graduate grad1( 2001,"Wang", 98.5,563.5);              //定义 Graduate 类对象 grad1
    Student * pt = &stud1;                                 //定义指向基类对象的指针变量 pt
    pt->display( );
    //grad1.display( );
   
//Graduate * ptr = &grad1;
   
//ptr->display( );
    pt = &grad1;
    pt->display( );
    system("pause");
    return 0;
}
/*这个例子充分说明了通过指针,能够调用同一类族中不同类的同名函数,以实现多态性。如果指针不断地指向同一类族
中不同类的对象,就能不断地调用这些对象中的同名函数
*/
3 回复
#2
mxs8102010-08-10 20:11
学习很认真啊,哈哈
#3
hmsabc2010-08-10 21:49
回复 2楼 mxs810
谢谢表扬!
#4
pangding2010-08-11 02:09
肯定是坚持天天学了,确实挺值得表扬的。
1