【c++】虚函数讲解

  • 虚函数的作用

当涉及继承关系的时候,对于某些函数,基类和派生类希望有各自的版本,那么基类可以将函数声明为虚函数。

对于基类而言,其中的成员函数可以分为两种,一种希望派生类直接继承;第二种希望派生类有自己的版本,此时应当声明为虚函数。

对于派生类而言,并不是一定需要重写从基类继承来的虚函数。如果重写虚函数,那么派生类将有自己的版本,如果不重写,那么将使用基类的版本。

  • override关键字

如果派生类希望使用自己的版本,C++11提供了override关键字,可以显式地注明。override关键字放在const、或者参数列表之后。推荐使用关键字,否则当派生类中重写基类的虚函数,但是如果参数列表不一致,或者返回值不一致,那么此时并没有发生覆盖行为,只是派生类定义了一个新的函数。

  • final关键字

如果不希望派生类覆盖基类中的虚函数,可以使用final关键字。使用final关键字后,任何覆盖的尝试都将编译报错。

#include <iostream>


class base{
public:
	virtual void print() const {
		std::cout << "base print" << std::endl;
	}
};

class A :public base{
public:
	 int getval() const{
		 return val;
	}
	 virtual void print() const {
		 std::cout << "A print: "<<getval() << std::endl;
	 }
private:
	int val = 2;
};

class B :public base{
public:
	int getval() const{
		return val;
	}
	
private:
	int val = 2;
};

class C :public base{
public:
	int getval() const{
		return val;
	}
	virtual void print() const override final {
		std::cout << "C print: " << getval() << std::endl;
	}
private:
	int val = 3;
};

class D :public C{
public:

	//发生重写行为时,将编译报错
	virtual void print()const {
		std::cout << "D print: " << getval() << std::endl;
    }
};


int 
main(int argc, char **argv)
{
	A a;
	B b;
	C c;
	a.print();//输出  A print: 2
	b.print();//输出  base print
	c.print();//输出  C print: 3
	system("pause");
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值