![]() |
#2
mxs8102010-08-10 20:11
|

//基类与派生类中有同名函数
/* 在下面的程序中 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;
}
/*这个例子充分说明了通过指针,能够调用同一类族中不同类的同名函数,以实现多态性。如果指针不断地指向同一类族
中不同类的对象,就能不断地调用这些对象中的同名函数*/
/* 在下面的程序中 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;
}
/*这个例子充分说明了通过指针,能够调用同一类族中不同类的同名函数,以实现多态性。如果指针不断地指向同一类族
中不同类的对象,就能不断地调用这些对象中的同名函数*/