C++虚函数与抽象类

C++虚函数与抽象类

1.虚函数

I>虚函数声明:

在类内的函数声明前加virtual,类外定义时不用加

class A {
public:
    A() {

    }
    virtual void f();
};
void A::f() {
    cout << "A::f()" << endl;
}

class B : public A{
public:
    B() {

    }
    void f();
};
void B::f(){
    cout << "B::f()" << endl;
}

II>虚函数调用:

通过对象调用时,和普通函数一样

由于基类引用和指针可以指向派生类,通过基类引用和派生类调用虚方法时,可以判断当前对象的类型,调用对应的方法(Java中被成为动态绑定)

int main() {

    A objA;
    B objB;
    A &ra_a = objA;
    A &ra_b = objB;

    objA.f();
    objB.f();
    ra_a.f();
    ra_b.f();
    return 0;
}

输出:

A::f()
B::f()
A::f()
B::f()

前两个通过对象调用,和普通的函数一样;后面两个都通过基类引用调用,根据对象类型不同调用不同的函数。

虚函数的调用机制通过虚函数表实现,我的另一篇博客有写到。

III>需要注意的地方:

将基类的析构函数声明为虚函数 这样基类的指针在delete对象时,调用的就是和对象类型相符的析构函数。

2.抽象类

I>纯虚函数

声明: virtual 函数头(参数列表) = 0;

II>抽象类

至少包含一个纯虚方法的类叫抽象类,抽象类不能实例化,但可以被继承

III>继承抽象类

可以通过继承抽象基类,在派生类中实现基类中的纯虚方法,使派生了可以实例化对象

虽然抽象类不能实例化,但可以通过抽象类的指针管理它的派生类对象

猜你喜欢

转载自blog.csdn.net/qq2071114140/article/details/89312259