C++中虚函数和虚基类说明

虚函数总结:
虚函数的作用:让一个基类的指针在不知道指向哪个子类的时候能够正确的调用被重载的函数
原理:为了说明虚函数的原理,首先得知道继承的原理,继承其实就是把基类的成员按照继承的方式(public/private)被子类所包含,
实际上子类的第一个成员变来并不是实际包含在子类中的成员变量,而是继承基类所来的成员变量
比如说:
class father
{
public:
int a;
};


class son1 : public father
{
public:
int b;
};


son1类的第一成员变量是 int a;  而不是int b;
即:son1类有两个成员变量 int a 和 int b;


知道了继承的原理,再来说明虚函数:
因为子类会把基类的虚函数一起继承过去,虚函数相当于是一个指针,每个子类都会有基类的这个虚函数
例如:
class father
{
public:
int a;
virtual void status()
{
cout << "我是父亲类!" << endl;
}
};


class son1 : public father
{
public:
int b;
virtual void status()
{
cout << "我是大儿子类!" << endl;
}
};


class son2 : public father
{
public:
int c;
virtual void status()
{
cout << "我是小儿子类!" << endl;
}
};


按照上面说的,son1类实际上有四个成员,基类的 int a; 和 基类的:virtual void status() 和 自己的 int b; 和 virtual void status()
在C++中,如果创建了virtual,那么子类就会把自己的 void status()函数的内存地址存在 从基类那里继承来的virtual void status()中,
此时,当你基类的指针调用函数status时,其实还是调用自己的status函数,只不过,如果此时该指针指向的是son1类,那么son1类的函数

地址会被存在基类的status中,那么调用的就是son1类的函数


#include<iostream>
#include<string>

using namespace std;

class father
{
public:
	//纯虚函数: virtual void status() = 0;
	//不是纯虚函数
	virtual void status()
	{
		cout << "我是父亲类!" << endl;
	}
};

class son1 : public father
{
public:
	virtual void status()
	{
		cout << "我是大儿子类!" << endl;
	}
};

class son2 : public father
{
public:
	virtual void status()
	{
		cout << "我是小儿子类!" << endl;
	}
};

int main()
{
	father *p = new son1;

	p->status();

	return 0;
}

运行结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值