c++ 虚函数

虚函数

虚函数是面向对象编程中函数的一种特定形态,是C++中用于实现多态的一种有效机制
虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。
在面向对象的编程中,首先会针对数据进行抽象(确定基类)和继承(确定派生类),构成类层次,通过引入虚函数概念来构成多态,便于复写。

final和override说明符

overload约定成俗的被翻译为“重载”。是指编写一个与已有函数同名但是参数表不同的函数,是对于基类的重写。
final是规定不许后续的其他类覆盖该函数,不可重写

动态绑定

虚函数的调用可能在运行阶段才被绑定,当我们使用基类引用或指针调用一个虚函数成员会执行动态绑定,注意当且仅当对通过指针或引用调用虚函数时,才会在运行时候解析调用,也只有这种情况下静态类型与对象的动态类型不一致

class Str
{
public:
    Str() = default;
    Str(int a, int b) : t(a), nums(b) {}
    virtual void fun() { cout << t + nums << endl; }
    virtual ~Str()=default;
private:
    int t;
    int nums;
};
class strles : public Str
{
public:
    strles() = default;
    strles(int a, int b, int c) : Str(a, b), cul(c){};
    virtual void fun() override;
private:
    int cul;
};
void strles::fun()

{
    cout << cul << endl;
}
int main()
{
    Str a(3, 4), *b;
    strles c(3, 4, 5), *d;
    b = &c;
    a.fun();
    b->fun();
    c.fun();
    return 0;
}

此处*b进行动态绑定,只有在编译时才知道其类型,且基类析构函数为虚函数。

注意

1、纯虚函数声明如下: virtual void funtion1()=0; 纯虚函数一定没有定义,纯虚函数用来规范派生类的行为,即接口。包含纯虚函数的类是抽象类,抽象类不能定义实例,但可以声明指向实现该抽象类的具体类的指针或引用。
2、虚函数声明如下:virtual ReturnType FunctionName(Parameter) 虚函数必须实现,
3.析构函数应当是虚函数,将调用相应对象类型的析构函数,因此,如果指针指向的是子类对象,将调用子类的析构函数,然后自动调用基类的析构函数。
4.友元不是成员函数,只有成员函数才可以是虚拟的,因此友元不能是虚拟函数。但可以通过让友元函数调用虚拟成员函数来解决友元的虚拟问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值