继承关系中派生类重写基类(成员函数和虚函数)

我们知道,要想重写基类的虚函数,函数名称、参数、返回类型必须相同,才能够实现多态。

class a {
public:
	a() = default;
	  virtual void display(int a)const {
		std::cout << " A virtual" << std::endl;
	}
};
class b :public a {
public:
	b() = default;
	   void display(int a)const { 
		std::cout << " B" << std::endl;
	}   
};
class c :public b {
public:
	c() = default;
	//very very nice  
	void display(int a)const override{   
		std::cout << "C virtual" << std::endl;
	}
};
int main() {
	a* ptr = nullptr;
	b second;
	ptr = &second;
	ptr->display(2.3);   
	c third;
	ptr = &third;
	ptr->display(2.3);

这里要注意:b类中重载时什么关键字都没有写,vitual和override都没有,但依然会别当作虚函数。

 

这是我们知道的,那么如果不相同会怎么样呢?

这里就不贴例子了,记住一点,只要和上面例子中不同的,都会别当作非虚成员函数来处理。

比如,如果我在b类中是这样写:

 virtual void display(double a)const{

.......

}

这个函数依然会被当作非虚成员函数来处理。

 

下面是我的总结,可能写的不太容易理解:

/*总结:
父类为虚函数时,

子类中,
1.当名称相同,是不是virtual都一样,但是参数不同时,编译会将其当作非虚成员函数进行处理
2.如果名称相同,是不是virtual都一样,参数相同,都是对虚函数的重写,这里要注意的是,就算不加vitual,不加override也是从写虚函数
 父类为非虚函数时,
3.如果子类为同名同参虚函数,编译器依然会将其当作非虚成员函数来处理,就算后面的函数也是如此,依然是非虚成员函数来处理
4.如果子类为同名不同参虚函数,和上面相同的结果

所以呢,只有当名称相同,并且参数相同的虚函数时,才能作为虚函数,实现多态。*/

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值