zoukankan      html  css  js  c++  java
  • C++基础学习笔记

      虚函数:虚函数是动态绑定的基础。虚函数必须是非静态的成员函数,虚函数经过派生后在类族中就可以实现运行过程中的多态。

      根据类型兼容原则,可以使用派生类的对象代替基类对象。如果用基类类型的指针指向派生类对象,就可以通过这个指针来访问该对象,问题是访问到的只是从基类中继承来的同名函数。解决办法:若需要通过基类指针指向派生类对象,并且访问某个与基类同名的成员,首先在基类中将该同名函数声明为虚函数。如此,通过基类类型的指针,就可使属于不同派生类的不同对象产生的不同的行为,从而实现运行过程的多态。

      虚函数在类的定义中使用virtual关键字来限定成员函数。注:虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候。

      运行时多态需满足三个条件:1、类之间满足类型兼容原则。2、要声明虚函数。3、由成员函数来调用或通过指针、引用来访问虚函数

    #include <iostream>
    using namespace std;
    
    class B0
    {
        public:
            virtual void display(){cout << "B0::display()" <<endl;}
    };
    
    class B1:public B0
    {
        public:
            void display(){cout << "B1::display()" <<endl;}
    };
    
    class D1:public B1
    {
        public:
            void display(){cout << "D1::display()" <<endl;}
    };
    
    void fun(B0 *ptr)
    {
        ptr->display();
    }
    
    int main()
    {
        B0 b0,*p;
        B1 b1;
        D1 d1;
        
        p = &b0;
        fun(p);
        p = &b1;
        fun(p);
        p = &d1;
        fun(p);
    }

     Note:在重写继承来的虚函数时,如果函数由默认参数值,不可重新定义不同的值。原因:虽然虚函数是动态绑定的,但默认形参值是静态绑定的。也即,通过一个指向派生类对象的基类指针,可以访问到派生类的虚函数,但默认形参值却只能来自基类的定义。

  • 相关阅读:
    无法通过给定的扩展名确定设备类型
    biuld example_osgviewerGLUT遇到的error Link2019
    OpenGL渲染流水线
    设计模式总目录
    删除thumbs.db是提示正在使用
    COM技术内幕第十章笔记EXE中的服务器
    在高低版本之间互导max文件,以fbx格式为载体尤佳。
    参数值传递的本质
    VS 为什么要检查行尾的一致性?
    vs2005中的GL文件
  • 原文地址:https://www.cnblogs.com/CoolRandy/p/3131242.html
Copyright © 2011-2022 走看看