zoukankan      html  css  js  c++  java
  • C++中的虚函数(类的向上转换,和向下转换)

    1.C++中的封装时为了代码的模块化,继承是为了代码的重用,而多态则是为了接口的重用.

    2.C++中的多态是用虚函数来实现的.

    3.子类对象向父类指针的转换(向上转换)是安全的,隐式的,而父类对象向子类指针的转换(向下转换)是不安全的,用dynamic_cast<>转换会得到一个空指针.

    4.普通的成员函数会根据指针的类型决定调用哪个函数,而虚函数则会每次都去查虚函数表,根据具体的类对象来决定调用哪个函数.

    class father{
    public:
        void fa()
        {
            cout << "fa" << endl;
        }
        virtual void fb()
        {
            cout << "fb" << endl;
        }
    };
    
    class son :public father{
    public:
        void fa()
        {
            cout << "son::fa" << endl;
        }
        void fb()
        {
            cout << "son::fb" << endl;
        }
    };
    
    int main()
    {
        father f;
        son s;
        father *pf;
        son *ps;
        pf = &s;//子类对象赋给父类指针,类的向上转换是安全的,隐式的
        pf->fa();//对于普通成员函数,简单的根据指针类型来决定调用的函数
        pf->fb();//对于虚函数,则需要查虚函数表
    
        ps = (son*)&f;//向下转换,不安全
        ps->fa();//如果是普通的成员函数,则只会机械的根据指针类型去调用相应的函数
        ps->fb();//如果是虚函数,则会每次都去查虚函数表,看到底是什么类型的对象,再决定调相应的函数(虽然类的向下转换是不安全的,会报错的)
    
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    个人第四次作业
    个人第四作业
    英语学习app——Alpha发布2
    英语学习app——Alpha发布1
    团队作业---系统设计
    团队第二次作业:需求分析
    第三次作业:结对编程
    团队第一次作业
    Web测试实践 第二天
    Web测试实践 第一天
  • 原文地址:https://www.cnblogs.com/ttss/p/4119472.html
Copyright © 2011-2022 走看看