virtual虚函数的作用

#include <iostream>
#include <string>
using namespace std;
class Person
{
protected:
string name;
int age;
public:
Person(string n,int a): name(n),age(a) {};
~Person() {};
    void print()
{
cout << "name: " << name << "  ,age: "  << age << endl;
}
};
class Student: public Person
{
private:
float score;
public:
Student(string n,int a,float s) : Person(n,a),score(s) {};
    ~Student() {};
void print()
{
cout << "name: " << name << "  ,age: "  << age << "   ,score: " << score << endl;
}
};
void show(Person *per1)
{
per1->print();
}
int main()
{
Student stu("tanjianwen",20,98);
stu.print();
Person *per;
per = &stu;
per->print();
return 0;
}
Person的对象指针指向继承类的对象时,没有用virtual,仍然调用Person的函数,输出如下:
virtual虚函数的作用 - JIM - 叶沁寒
这是因为在没有声明虚函数的时候,在编译的时候就就进行了绑定。而是使用了virtual声明,就会采用迟绑定,到运行的时候再确认使用哪个函数。
#include <iostream>
#include <string>
using namespace std;
class Person
{
protected:
string name;
int age;
public:
Person(string n,int a): name(n),age(a) {};
~Person() {};
    virtual void print()
{
cout << "name: " << name << "  ,age: "  << age << endl;
}
};
class Student: public Person
{
private:
float score;
public:
Student(string n,int a,float s) : Person(n,a),score(s) {};
    ~Student() {};
void print()
{
cout << "name: " << name << "  ,age: "  << age << "   ,score: " << score << endl;
}
};
void show(Person *per1)
{
per1->print();
}
int main()
{
Student stu("tanjianwen",20,98);
stu.print();
Person *per;
per = &stu;
per->print();
return 0;
}
virtual虚函数的作用 - JIM - 叶沁寒
 

 



转载于:https://www.cnblogs.com/tanjianwen/p/5245409.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值