自学内容网 自学内容网

21天学通C++——11多态(引入多态的目的)

多态:

利用不同类似的方法处理不同类似的对象

笔记原因:

既然继承可以进行基类的方法覆盖,为什么还要引入多态呢?

解释原因:

继承

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


int main() {
    Derived d;
    Base* p = &d;
    p->func();
    return 0;
}

结果为Base::func()

引入多态(Virtual) 

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


int main() {
    Derived d;
    Base* p = &d;
    p->func();
    return 0;
}

 结果为Derived::function()

结论:

未引入virtual,在编译时,编译器根据指针的类型(Base*)来决定调用哪个函数,静态绑定行为

引入多态,允许动态绑定,当一个基类成员被声明为virtual时,并且在派生类中被重写,通过基类指针或引用调用该函数时,实际调用的函数是根据对象的实际类型来确定的,而不是指针或引用的类型。


原文地址:https://blog.csdn.net/weixin_66405733/article/details/145234444

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!