一.虚函数和纯虚函数
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,子类对父类方法的重写.
如有错误,请指正