c++中继承多态virtual和override

本文介绍了C++中的继承、多态和虚函数(virtual)的概念,强调了虚函数在实现运行时多态性中的作用。文章详细阐述了继承、多态的原理,并讲解了如何使用`virtual`和`override`关键字。同时,列举了一些在使用这些特性时常见的错误,如忘记声明虚函数、忘记使用`override`关键字、内存泄漏等,并提供了相应的解决方案。
摘要由CSDN通过智能技术生成

目录

virtual:

易错点:

未声明虚函数:

忘记使用 override 关键字:

内存泄漏:

基类指针不指向任何对象:

访问权限问题:

不正确的类设计:

不正确的对象切片:

混淆 virtual 和 static 成员函数:

多重继承的二义性:

override:

继承(Inheritance):

多态(Polymorphism):

virtual 关键字:

override 关键字:


virtual:

C++中,继承和多态通常与虚函数(virtual)一起使用,以实现运行时多态性。以下是有关继承、多态和虚函数的更详细说明:

  1. 继承

    • 继承是一种机制,允许你创建一个新的类(派生类/子类),该类可以继承另一个类(基类/父类)的属性和方法。
    • 派生类可以访问基类的公有和受保护成员,但不能访问基类的私有成员。
  2. 多态

    • 多态是一种特性,允许不同对象对相同的消息(函数调用)做出不同的响应。
    • 多态可以通过函数重载和虚函数来实现。
  3. 虚函数

    • 虚函数是在基类中声明的函数,可以在派生类中被重写。
    • 声明一个函数为虚函数需要在函数声明前加上 virtual 关键字,例如:virtual void someFunction();
    • 当通过基类指针或引用调用虚函数时,实际执行的是派生类中的版本,而不是基类中的版本。这个过程被称为动态绑定,它实现了多态性。

示例:

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

class Derived : public Base {
public:
    void print() override {
        std::cout << "Derived class" << std::endl;
    }
};

int main() {
    Base* ptr = new Derived();
    ptr->print(); // 调用 Derived 类中的 print() 函数
    delete ptr;
    return 0;
}

在上面的示例中,Base 类中的 print 函数被声明为虚函数,而 Derived 类中重写了这个虚函数。当通过指向 Derived 对象的 Base 指针调用 print 函数时,会调用 Derived 类中的版本,实现了多态性。这是因为虚函数的调用在运行时动态绑定到正确的函数版本。

易错点:

当使用C++中的继承、多态和虚函数时,以下是每个点的更详细解释以及如何避免相关错误:

  1. 未声明虚函数
    • 错误说明:如果在基类中未将成员函数声明为虚函数,那么派生类中对该函数的重写将不会触发动态绑定,这可能导致多态性无法正常工作。
  2. 解决方法:确保在基类中需要多态性的成员函数前使用 virtual 关键字进行声明。例如:
    class Base {
    public:
        virtual void myFunction() {
            // ...
        }
    };
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五百五。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值