虚拟函数使得父类指针可以调用派生类的同名函数

// 虚拟函数.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');

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
请按任意键继续. . .
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值