// 虚拟函数.cpp : Defines the entry point for the console application.
//函数重载是指函数名相同,在函数调用时,根据函数参数类型或个数的不同而调用正确的函数版本。
//而虚拟函数无论是函数名还是函数的返回值及函数的参数都完全相同。
//虚拟函数使得父类指针可以调用派生类的同名函数--该函数即通常所说的在子类重写父类的那个虚函数。
#include "stdafx.h"
#include <iostream>
using namespace std;
class student
{
protected:
int num;
char name[10];
char sex;
public:
student(int n,char *na,char s)
{
num=n;
strcpy(name,na);
sex=s;
}
virtual void display()//这里虚拟函数的作用就是 基类的指针取派生类对象地址后,用这一指针调用display()函数,调用的是派生类的display()函数。
{
cout<<"基类的display函数"<<endl<<num<<endl<<name<<endl<<sex<<endl;
}
};
class stud :public student
{
private:
int age;
public:
stud (int,char *,char,int);
void display();
};
stud::stud(int n,char *na,char s,int a):student(n,na,s)
{
age=a;
}
void stud::display()
{
cout<<"派生类的display函数"<<endl<<num<<endl<<name<<endl<<sex<<endl<<age<<endl;
}
student a(100,"chen",'M');
{
a.display();
b.display();
student *p1,*p2;
stud *p3;//生成派生类的指针
p1=&a;//基类指针取基类对象地址
p2=&b;//基类指针取派生类对象地址
p3=&b;//派生类指针取派生类对象地址
p1->display();//调用基类display()函数
p2->display();//如果基类的display()函数不是虚函数,则调用的是基类的display()函数,
//但因为它是虚函数,所以调用的是派生类的display()函数
p3->display();//调用派生类display()函数
system("pause");
}
/* 执行结果
基类的display函数
100
chen
M
派生类的display函数
101
wang
F
23
基类的display函数
100
chen
M
派生类的display函数
101
wang
F
23
派生类的display函数
101
wang
F
23
请按任意键继续. . .
*/
//函数重载是指函数名相同,在函数调用时,根据函数参数类型或个数的不同而调用正确的函数版本。
//而虚拟函数无论是函数名还是函数的返回值及函数的参数都完全相同。
//虚拟函数使得父类指针可以调用派生类的同名函数--该函数即通常所说的在子类重写父类的那个虚函数。
#include "stdafx.h"
#include <iostream>
using namespace std;
class student
{
protected:
int num;
char name[10];
char sex;
public:
student(int n,char *na,char s)
{
num=n;
strcpy(name,na);
sex=s;
}
virtual void display()//这里虚拟函数的作用就是 基类的指针取派生类对象地址后,用这一指针调用display()函数,调用的是派生类的display()函数。
{
cout<<"基类的display函数"<<endl<<num<<endl<<name<<endl<<sex<<endl;
}
};
class stud :public student
{
private:
int age;
public:
stud (int,char *,char,int);
void display();
};
stud::stud(int n,char *na,char s,int a):student(n,na,s)
{
age=a;
}
void stud::display()
{
cout<<"派生类的display函数"<<endl<<num<<endl<<name<<endl<<sex<<endl<<age<<endl;
}
student a(100,"chen",'M');
stud b(101,"wang",'F',23);
void main(){
a.display();
b.display();
student *p1,*p2;
stud *p3;//生成派生类的指针
p1=&a;//基类指针取基类对象地址
p2=&b;//基类指针取派生类对象地址
p3=&b;//派生类指针取派生类对象地址
p1->display();//调用基类display()函数
p2->display();//如果基类的display()函数不是虚函数,则调用的是基类的display()函数,
//但因为它是虚函数,所以调用的是派生类的display()函数
p3->display();//调用派生类display()函数
system("pause");
}
/* 执行结果
基类的display函数
100
chen
M
派生类的display函数
101
wang
F
23
基类的display函数
100
chen
M
派生类的display函数
101
wang
F
23
派生类的display函数
101
wang
F
23
请按任意键继续. . .
*/