C++ 的虚函数

概念:
在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数。虚函数百度百科

作用:(允许用基类的指针来调用子类的这个函数)实现多态性。
引用自知乎的C++虚函数有什么用

例子:

  1. 定义两个类,A为动物类,B为猫类(继承A)
  2. 实现eat方法
  3. 调用
class Animal {
public:
	void eat() {
		std::cout << "I'm eating generic food.";
	}
};

class Cat:public Animal {
public:
	void eat() {
		std::cout << "I'm eating a rat.";
	}
};

实现完开始调用

int main() {
 
 	Animal *animal = new Animal;
	animal ->eat();
	// 输出: "I'm eating generic food."

 	Cat *cat = new Cat;
	cat -> eat();
	 // 输出: "I'm eating a rat."

 	return 0;
};

额外引入一个函数

void func(Animal *a) {
	a ->eat();
}

接着在main中调用func


int main() {
 
 	Animal *animal = new Animal;
	func(animal);
	// 输出: "I'm eating generic food."

 	Cat *cat = new Cat;
	func(cat);
	// 输出: "I'm eating generic food."

 	return 0;
};

导致传入cat也输出generic food的是因为func它的参数类型是Animal ,因此,如果要实现cat的eat方法,需要重载函数。

void func(Animal *a){
	a -> eat();
}

void func(Cat *b){
 b -> eat();
}

若每个动物都重载一遍,太繁琐了。虚函数就可以解决此问题

class Animal {
public :
	virtual void eat() {
		std::cout << "I'm eating generic food.";
	}
};

class Cat : public Animal {
public :
	void eat() {
		std::cout << "I'm eating a rat.";
	}
};

int main() {
 void func (Animal * a){
 	a -> eat();	
 }
 
  	Animal *animal = new Animal;
	func(animal);
	// 输出: "I'm eating generic food."

 	Cat *cat = new Cat;
	func(cat);
	// 输出: "I'm eating a rat.";
};

例子来源:简单的“猫吃老鼠”例子

简单总结一下:
虚函数,允许用基类的指针来调用子类的这个函数。通过虚函数,实现多态。(减少大量不必要的方法重载)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值