C++ 虚函数、纯虚函数、重载、重写的区别

一.虚函数和纯虚函数

C++中用virtual来表示虚函数

虚函数代表的是子类可以重写父类的虚函数

纯虚函数就是子类必须重写父类的纯虚函数,否则编译报错

虚函数virtual等价于C#中的虚函数

纯虚函数 virtual {} =0 等价于C#中的abstract函数,即抽象函数

 

一个类中可以包含虚函数和正常函数,若包含了纯虚函数的类被称为抽象类,抽象类不能实例化,只能有子类去实例化

只包含了纯虚函数的类可以被称之为接口,也是抽象类。 等价于C#中的Interface.

 

具体用法如下:

Base.h头文件

class Base
{
	virtual void SetA(int n);         //虚函数
	virtual void SetB(int n) = 0;     //纯虚函数,用virtual和末尾=0来表示
	virtual void SetC(int n) const = 0;  //纯虚函数,const代表该函数不得修改成员变量的值

public:
	int a = 1;
	int b = 2;
	int c = 3;
};

Base.cpp源文件

#include "Base.h"
//虚函数基类要提供实现。否则没有意义,你直接定义纯虚函数得了
void Base::SetA(int n)
{
	a = n;
}


People.h头文件

#include "Base.h"
class People : public Base
{
     public:
     void SetB(int n)  override;        //override可加可不加,加了之后编译器会帮忙检查,override只能加在声明后面,不能加在定义后面
     void SetC(int n)  const override;  //由于SetC是const修饰,所以子类也需要const
};


People.cpp源文件

#include "People.h"

void People::SetB(int n)   
{
	b = 10;
}
void People::SetC(int n)const
{
	//c = 0;     //报错,被const修饰不能修改成员变量 
}

 

二.重载和重写

1.函数重载

是指函数的参数不同(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。

比如一些类构造函数,经常会用到重载

如QT中的QString就有7,8个重载的构造函数

2.重写

就是上面讲的虚函数,纯虚函数,override,子类对父类方法的重写.

 

 

如有错误,请指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值